有什么区别
console.log(process.cwd())
and
console.log(__dirname);
我在类似的情况下看到过这两种用法。
有什么区别
console.log(process.cwd())
and
console.log(__dirname);
我在类似的情况下看到过这两种用法。
根据node js文档 process.cwd ()
cwd是全局对象进程的一个方法,返回一个字符串值,该值是Node.js进程的当前工作目录。
根据node js文档 __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和运行节点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返回当前运行文件所在目录的值。
知道每个词的范围可以让事情更容易记住。
Process是节点的全局对象,.cwd()返回节点运行的位置。
__dirname是模块的属性,表示模块的文件路径。在node中,一个模块位于一个文件中。
类似地,__filename是另一个模块的属性,它保存了模块的文件名。
$ 查找项目列表
proj
proj/src
proj/src/index.js
$ cat proj/src/index.js
console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);
$ CD proj;节点src / index.js
process.cwd() = /tmp/proj
__dirname = /tmp/proj/src