process.cwd() 与 __dirname 有啥区别?
Posted
技术标签:
【中文标题】process.cwd() 与 __dirname 有啥区别?【英文标题】:What's the difference between process.cwd() vs __dirname?process.cwd() 与 __dirname 有什么区别? 【发布时间】:2012-04-10 02:09:16 【问题描述】:有什么区别
console.log(process.cwd())
和
console.log(__dirname);
我见过两者都在类似的情况下使用。
【问题讨论】:
【参考方案1】:process.cwd()
返回当前工作目录,
即您从中调用 node
命令的目录。
__dirname
返回包含 javascript 源代码文件的目录的目录名
【讨论】:
这是否意味着除了require()
之外的所有情况下process.cwd()
都是.
的同义词?
@AlexanderGonchiy 正确,.
是相对于 process.cwd()
(所以是同义词),除了 require()
相对于当前执行文件起作用。请参阅here 了解更多信息。
请注意,当前工作目录可以在运行时使用 process.chdir 更改,因此它并不总是调用节点的目录。【参考方案2】:
根据节点 js doc
process.cwd()
cwd
是全局对象process
的方法,返回一个字符串值,即Node.js进程的当前工作目录。
根据节点 js doc
__dirname
当前脚本的目录名称作为字符串值。 __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
假设我们在项目的子目录中有另一个文件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
返回当前运行文件所在目录的值。
【讨论】:
【参考方案3】:了解每个的范围可以让事情更容易记住。
process
是node
的全局对象,.cwd()
返回节点运行的位置。
__dirname
是module
的属性,代表模块的文件路径。在节点中,一个模块驻留在一个文件中。
同样,__filename
是module
的另一个属性,它保存模块的文件名。
【讨论】:
【参考方案4】:$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
【讨论】:
以上是关于process.cwd() 与 __dirname 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
node中__dirname__filenameprocess.cwd()process.chdir()表示的路径
node中__dirname__filenameprocess.cwd()process.chdir()表示的路径