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

有什么区别

console.log(process.cwd()) 

 console.log(__dirname); 

我已经看到两个类似的情况下使用。

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

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

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

按照节点js doc process.cwd()

cwd是全局对象process一个方法,返回一个string值,它是Node.js进程的当前工作目录。

按照节点js doc __dirname

当前脚本的目录名称作为string值。 __dirname实际上并不是一个全局的,而是每个模块本地的。

让我用例子来解释,

假设我们有一个main.js文件驻留在C:/Project/main.js node 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和运行node main.js ,它们需要script.js

main.js

 require('./assets/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