ChatGPT解决这个技术问题 Extra ChatGPT

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

有什么区别

console.log(process.cwd())

console.log(__dirname);

我已经看到两者都在类似的情况下使用。


M
Mark Amery

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

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

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


这是否意味着对于除 require() 之外的所有情况,process.cwd() 都是 . 的同义词?
@AlexanderGonchiy 正确,.process.cwd() 相关(因此同义),但 require() 与当前执行文件相关。有关更多信息,请参见here
请注意,当前工作目录可以在运行时使用 process.chdir 更改,因此它并不总是调用节点的目录。
A
Audwin Oyong

根据节点 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 并运行需要 script.jsnode main.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 返回当前运行文件所在目录的值。


t
themefield

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

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

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

同样,__filename 是另一个 module 的属性,它保存模块的文件名。


u
user1412192

$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