process.cwd()和__dirname之间有什么区别?

hel*_*hod 265 node.js

有什么区别

console.log(process.cwd())
Run Code Online (Sandbox Code Playgroud)

console.log(__dirname);
Run Code Online (Sandbox Code Playgroud)

我已经看到两者都在类似的情境中使用过.

Ray*_*nos 436

process.cwd() 返回当前工作目录,

即您调用该node命令的目录.

__dirname 返回包含JavaScript源代码文件的目录的目录名称

  • @AlexanderGonchiy正确,`.`是相对于`process.cwd()`(所以是同义的),除了`require()`,它相对于当前正在执行的文件.有关更多信息,请参见[此处](http://stackoverflow.com/a/16730379/927631). (10认同)
  • 这是否意味着`process.cwd()`是除``require()`之外的所有情况的`.`的同义词? (5认同)
  • 请注意,当前工作目录可以在运行时使用 process.chdir 进行更改,因此它并不总是调用节点的目录。 (4认同)

sam*_*j90 69

根据节点js doc process.cwd()

cwd是一个全局对象的方法process,返回一个字符串值,它是Node.js进程的当前工作目录.

根据节点js doc __dirname

当前脚本的目录名称作为字符串值.__dirname实际上不是全局的,而是每个模块的本地.

让我用例子解释一下,

假设我们有一个main.js文件驻留在里面C:/Project/main.js 并运行node main.js这两个值返回相同的文件

或者只是使用以下文件夹结构

Project 
??? main.js
???lib
   ??? script.js
Run Code Online (Sandbox Code Playgroud)

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true
Run Code Online (Sandbox Code Playgroud)

假设我们script.js在项目的子目录中有另一个文件文件,即C:/Project/lib/script.js运行node main.js需要的文件script.js

main.js

require('./lib/script.js')
console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true
Run Code Online (Sandbox Code Playgroud)

的script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false
Run Code Online (Sandbox Code Playgroud)


the*_*eld 11

了解每个的范围可以使事情更容易记住。

processisnode的全局对象,并.cwd()返回节点运行的位置。

__dirnameismodule的属性,表示模块的文件路径。在节点中,一个模块驻留在一个文件中。

同样,__filename是 anothermodule的属性,它保存模块的文件名。


小智 5

$ find proj

proj
proj/src
proj/src/index.js
Run Code Online (Sandbox Code Playgroud)

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);
Run Code Online (Sandbox Code Playgroud)

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
Run Code Online (Sandbox Code Playgroud)