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


302

之间有什么区别

console.log(process.cwd())

console.log(__dirname);

我已经看到两者都用在相似的上下文中。

Answers:


486

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

即您从中调用node命令的目录。

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


5
这是否意味着除以外的所有情况的process.cwd()同义词?.require()
亚历山大·贡奇

10
@AlexanderGonchiy正确,.是相对于process.cwd()(如此的同义词)的,除了require()相对于当前正在执行的文件而言。看到这里更多。
居住

1
请注意,可以在运行时使用process.chdir更改当前工作目录,因此它并不总是从中调用节点的目录。
masterxilo

84

根据节点js 文档 process.cwd()

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

根据节点js 文档 __dirname

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

让我举例说明,

假设我们有一个main.js文件驻留在内部,C:/Project/main.js 并且运行node main.js这两个值将返回同一文件

或仅使用以下文件夹结构

Project 
├── main.js
└──lib
   └── script.js

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

假设我们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

script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false

9

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

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

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

同样,__filename是another module的属性,其中包含模块的文件名。


0

$ find proj

proj
proj/src
proj/src/index.js

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.