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

node.js

node.js Problem Overview


What's the difference between

console.log(process.cwd())

and

console.log(__dirname);

I've seen both used in similar contexts.

node.js Solutions


Solution 1 - node.js

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 - node.js

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.

Solution 3 - node.js

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 - node.js

$ 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhelpermethodView Question on Stackoverflow
Solution 1 - node.jsRaynosView Answer on Stackoverflow
Solution 2 - node.jsSAMUELView Answer on Stackoverflow
Solution 3 - node.jsthemefieldView Answer on Stackoverflow
Solution 4 - node.jsuser1412192View Answer on Stackoverflow