Qual è la differenza tra process.cwd () vs __dirname?


303

Qual è la differenza tra

console.log(process.cwd())

e

console.log(__dirname);

Ho visto entrambi usati in contesti simili.

Risposte:


487

process.cwd() restituisce la directory di lavoro corrente,

cioè la directory da cui hai invocato il nodecomando.

__dirname restituisce il nome della directory della directory contenente il file del codice sorgente JavaScript


5
Questo significa che process.cwd()è sinonimo di .tutti i casi tranne che per require()?
Alexander Gonchiy,

11
@AlexanderGonchiy corretto, .è relativo process.cwd()(quindi), ad eccezione del require()quale funziona rispetto al file di esecuzione corrente. Vedi qui per di più.
dwelle,

1
Si noti che la directory di lavoro corrente può essere modificata in fase di esecuzione utilizzando process.chdir, quindi non è sempre la directory da cui è stato richiamato il nodo.
Masterxilo,

85

Come da nodo js doc process.cwd()

cwdè un metodo di oggetto globale process, restituisce un valore stringa che è la directory di lavoro corrente del processo Node.js.

Come da nodo js doc __dirname

Il nome della directory dello script corrente come valore stringa. __dirname non è in realtà un globale ma piuttosto locale per ciascun modulo.

Lasciami spiegare con esempio,

supponiamo di avere un main.jsfile all'interno C:/Project/main.js e che node main.jsentrambi questi valori restituiscano lo stesso file

o semplicemente con la seguente struttura di cartelle

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

supponiamo di avere un altro file script.jsall'interno di una sottodirectory del progetto cioè C:/Project/lib/script.jse in esecuzione node main.jsche richiedonoscript.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

9

Conoscere l' ambito di ciascuno può rendere le cose più facili da ricordare.

processè nodel'oggetto globale e .cwd()restituisce dove è in esecuzione il nodo.

__dirnameè modulela proprietà e rappresenta il percorso del file del modulo. Nel nodo, un modulo risiede in un file.

Allo stesso modo, __filenameè un'altra moduleproprietà, che contiene il nome del file del modulo.


0

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.