我正在开发一个需要使用当前目录名称的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((方法返回路径的最后一部分。后面的目录分隔符将被忽略。