¿Cuál es la diferencia entre process.cwd () vs __dirname?

303

Cuál es la diferencia entre

console.log(process.cwd())

y

console.log(__dirname);

He visto a ambos utilizados en contextos similares.

método de ayuda
fuente

Respuestas:

487

process.cwd() devuelve el directorio de trabajo actual,

es decir, el directorio desde el que invocó el nodecomando.

__dirname devuelve el nombre del directorio que contiene el archivo de código fuente JavaScript

Raynos
fuente
55
¿Significa esto que process.cwd()es sinónimo .de todos los casos excepto require()?
Alexander Gonchiy
11
@AlexanderGonchiy correcto, .es relativo a process.cwd()(también), excepto require()que funciona en relación con el archivo en ejecución actual. Mira aquí para más.
Habita el
1
Tenga en cuenta que el directorio de trabajo actual se puede cambiar en tiempo de ejecución utilizando process.chdir, por lo que no siempre es el directorio desde el que se invocó el nodo.
masterxilo
85

Según el nodo js doc process.cwd()

cwdes un método de objeto global process, devuelve un valor de cadena que es el directorio de trabajo actual del proceso Node.js.

Según el nodo js doc __dirname

El nombre del directorio del script actual como un valor de cadena. __dirname no es realmente global sino más bien local para cada módulo.

Déjame explicarte con ejemplo,

supongamos que tenemos un main.jsarchivo que reside dentro C:/Project/main.js y que la ejecución de node main.jsambos valores devuelve el mismo archivo

o simplemente con la siguiente estructura de carpetas

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

supongamos que tenemos otros script.jsarchivos dentro de un subdirectorio del proyecto, es decir, en C:/Project/lib/script.jsejecución, node main.jsque requierenscript.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
samuelj90
fuente
9

Conocer el alcance de cada uno puede hacer que las cosas sean más fáciles de recordar.

processes nodeel objeto global y .cwd()regresa donde se está ejecutando el nodo.

__dirnamees modulepropiedad de y representa la ruta del archivo del módulo. En el nodo, un módulo reside en un archivo.

Del mismo modo, __filenamees modulepropiedad de otro , que contiene el nombre del archivo del módulo.

campo temático
fuente
0

PS find proj

proj
proj/src
proj/src/index.js

PS cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

PS cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
usuario1412192
fuente