What's the difference between process.cwd() vs __dirname?
Solution 1:
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
Solution 2:
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 example,
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.
Solution 3:
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.
Solution 4:
$ 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