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

时间:2018-11-14 07:42:33

标签: javascript node.js

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

我可以使用classpath获取当前目录的路径,如何获取当前目录名而不是整个路径?

可以执行以下操作吗?

process.cwd()

它可以工作,但感觉很脆弱,什么是最好,最可靠的方法

2 个答案:

答案 0 :(得分:1)

您要寻找的是path.basename

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

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

答案 1 :(得分:0)

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

  • 它可跨操作系统使用(Windows和类Unix系统使用不同的路径分隔符)
  • 它会忽略结尾的目录分隔符(即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())

process.cwd()

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>

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

path.basename(path [,ext])

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.resolve([... paths])

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(),请使用它!。