我正在开发一个cli应用程序,该应用程序需要使用当前目录的名称。
我可以使用classpath
获取当前目录的路径,如何获取当前目录名而不是整个路径?
可以执行以下操作吗?
process.cwd()
它可以工作,但感觉很脆弱,什么是最好,最可靠的方法?
答案 0 :(得分:1)
您要寻找的是path.basename:
const path = require('path');
path.basename(CWD)
path.basename()方法返回路径的最后一部分。 尾部目录分隔符将被忽略。
答案 1 :(得分:0)
即使答案中的代码可行,您也应使用path.basename()
来获取路径最后一部分的名称,因为:
process.cwd().split('/').slice(-1)[0]
中的最后一个/
)此外,为了提高安全性,您应该使用path.resolve()
,因为它会在获取基本名称之前规范化路径,从而摆脱与路径相关的怪癖。
如果可以通过/path/to/cwd/
获得/path/to/cwd
,则以下内容将为您提供目录的名称(在示例中为process.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()方法返回Node.js进程的当前工作目录。
Returns: <string>
保证是当前工作目录的绝对路径。使用这个!
console.log(`Current directory: ${process.cwd()}`);
path <string> ext <string> An optional file extension Returns: <string>
方法返回路径的最后一部分,类似于Unix basename命令。尾部目录分隔符将被忽略,请参阅path.sep。path.basename()
如果path不是字符串或者给定ext而不是字符串,则会引发TypeError。
path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // Returns: 'quux'
path.resolve()方法将一系列路径或路径段解析为绝对路径。
给定的路径顺序是从右到左处理的,随后的每个路径都将被添加,直到构造出绝对路径为止。例如,给定路径段的顺序:/ foo,/ bar,baz,调用path.resolve('/ foo','/ bar','baz')将返回/ bar / baz。
如果在处理所有给定的路径段之后仍未生成绝对路径,则使用当前工作目录。
除非将路径解析到根目录,否则将对生成的路径进行规范化并删除斜杠。
长度为零的路径段将被忽略。
如果未传递任何路径段,则path.resolve()将返回当前工作目录的绝对路径。
如果可以使用...paths <string> A sequence of paths or path segments
Returns: <string>
,则在其他情况下不需要process.cwd()
,请使用它!。