获取当前工作目录名,而不是Node.js中的路径



我正在开发一个需要使用当前目录名称的CLI应用程序。

我可以用process.cwd()获取当前目录的路径。如何获取当前目录名而不是整个路径?

可以做下面这样的事情吗?

process.cwd().split('/').slice(-1)[0]

它有效,但感觉很脆。做这件事最好、最有力的方法是什么?

即使答案中的代码有效,也应该使用path.basename()来获取路径最后一部分的名称,因为:

  • 它可以跨操作系统工作(windows和类unix系统使用不同的路径分隔符(
  • 它忽略后面的目录分隔符(即/path/to/cwd/中的最后一个/(

此外,为了额外的安全性,您应该使用path.resolve(),因为它在获得基本名称之前会对路径进行规范化,从而消除与路径相关的怪癖。

如果您可以使用process.cwd()获取/path/to/cwd,那么以下内容将为您提供目录名称(示例中为"cwd"(:

path.basename(process.cwd())

添加path.resolve()以获得额外的安全性:

path.basename(path.resolve(process.cwd()))

甚至:

path.basename(path.resolve())

示例:

const path = require('path');
function slice(pathName) {
const res = pathName.split(path.sep).slice(-1)[0];
console.log('slicer  ', pathName, '=>', `'${res}'`);
}
function basename(pathName) {
const res = path.basename(path.resolve(pathName));
console.log('basename', pathName, '=>', `'${res}'`);
}
slice('/path/to/cwd'); // cwd
basename('/path/to/cwd'); // cwd
slice('/path/to/cwd/'); // ''
basename('/path/to/cwd/'); // cwd
// Other valid paths
slice('/path/to/cwd/..'); // '..'
basename('path/to/cwd/..'); // cwd
slice('.'); // '.'
basename('.'); // <current directory name>

process.cwd((

Returns: <string>

process.cwd((方法返回Node.js进程的当前工作目录。

console.log(`Current directory: ${process.cwd()}`);

这是保证为当前工作目录的绝对路径。用这个!

path.basename(path[,ext](

path <string>
ext <string> An optional file extension
Returns: <string>

path.basename()方法返回路径的最后一部分,类似于Unix basename命令。后面的目录分隔符被忽略,请参阅path.sep。

path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux'

如果path不是字符串,或者给定的ext不是字符串,则抛出TypeError。

path.resolve([…paths](

...paths <string> A sequence of paths or path segments
Returns: <string>

path.resolve((方法将一系列路径或路径段解析为绝对路径。

给定的路径序列从右到左进行处理,每个后续路径都经过预处理,直到构建出绝对路径。例如,给定路径段的序列:/foo,/bar,baz,调用path.resolve('/foo','/bar','baz'(将返回/bar/baz。

如果在处理完所有给定的路径段后,尚未生成绝对路径,则使用当前工作目录。

除非将路径解析为根目录,否则会对生成的路径进行规范化并删除尾部斜杠。

忽略零长度的路径段。

如果没有传递路径段,path.resolve((将返回当前工作目录的绝对路径

如果您可以使用process.cwd(),则在其他情况下不需要path.resolve(),请使用它!。

您正在寻找路径.basename:

const path = require('path'); 
path.basename(CWD)

path.basename((方法返回路径的最后一部分。后面的目录分隔符将被忽略。

最新更新