ChatGPT解决这个技术问题 Extra ChatGPT

What's the difference between process.cwd() vs __dirname?

What's the difference between

console.log(process.cwd())

and

console.log(__dirname);

I've seen both used in similar contexts.


M
Mark Amery

process.cwd() returns the current working directory,

i.e. the directory from which you invoked the node command.

__dirname returns the directory name of the directory containing the JavaScript source code file


Does this mean that process.cwd() is synonym to . for all cases except for require()?
@AlexanderGonchiy correct, . is relative to process.cwd() (so synonymous), except for require() which works relative to current executing file. See here for more.
Note that the current working directory can be changed at runtime using process.chdir, so it is not always the directory from which node was invoked.
A
Audwin Oyong

As per node js doc process.cwd()

cwd is a method of global object process, returns a string value which is the current working directory of the Node.js process.

As per node js doc __dirname

The directory name of current script as a string value. __dirname is not actually a global but rather local to each module.

Let me explain with examples:

suppose we have a main.js file that resides inside C:/Project/main.js and running node main.js both these values return same file.

or simply with the following folder structure

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

suppose we have another file script.js files inside a sub directory of project, i.e. C:/Project/lib/script.js and running node main.js which require 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

Simply it can be stated as: process.cwd() returns the value of directory where we run the node process, whereas __dirname returns the value of directory where the current running file resides.


t
themefield

Knowing the scope of each can make things easier to remember.

process is node's global object, and .cwd() returns where node is running.

__dirname is module's property, and represents the file path of the module. In node, one module resides in one file.

Similarly, __filename is another module's property, which holds the file name of the 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