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

时间:2012-03-26 14:48:29

标签: node.js

之间有什么区别
console.log(process.cwd())

console.log(__dirname);

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

4 个答案:

答案 0 :(得分:389)

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

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

__dirname返回包含JavaScript源代码文件

的目录的目录名

答案 1 :(得分:54)

根据节点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

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

答案 2 :(得分:1)

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

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

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

类似地, __filename 是另一个module的属性,其中包含模块的文件名。

答案 3 :(得分: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