有什么区别
console.log(process.cwd())
和
console.log(__dirname);
我已经看到两者都在类似的情况下使用。
根据节点 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.js
的 node 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 返回当前运行文件所在目录的值。
了解每个的范围可以使事情更容易记住。
process
是 node
的全局对象,.cwd()
返回节点运行的位置。
__dirname
是 module
的属性,代表模块的文件路径。在节点中,一个模块驻留在一个文件中。
同样,__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
不定期副业成功案例分享
require()
之外的所有情况,process.cwd()
都是.
的同义词?.
与process.cwd()
相关(因此同义),但require()
与当前执行文件相关。有关更多信息,请参见here。