process.cwd() vs __dirname的区别是什么?

有什么区别

console.log(process.cwd())

而且

console.log(__dirname);

我在类似的情况下看到过这两种用法。

176637 次浏览

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

例如,调用node命令的目录。

__dirname返回JavaScript源代码文件所在目录的目录名

As per nodejs doc process.cwd() < / p >

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

As per nodejs doc __dirname < / p >

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

让我用例子来解释:

假设我们有一个位于C:/Project/main.js中的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

假设我们在project的子目录中有另一个文件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

它可以简单地表述为:

process.cwd()返回我们运行节点进程的目录的值,而

__dirname返回当前运行文件所在目录的值。

知道它们的范围可以让事情更容易记住。

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

__dirnamemodule的属性,表示模块的文件路径。在node中,一个模块位于一个文件中。

类似地,__filename是另一个module的属性,它保存了模块的文件名。

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