Qual è la differenza tra
console.log(process.cwd())
e
console.log(__dirname);
Ho visto entrambi usati in contesti simili.
Qual è la differenza tra
console.log(process.cwd())
e
console.log(__dirname);
Ho visto entrambi usati in contesti simili.
Risposte:
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
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
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.
$ 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
process.cwd()è sinonimo di.tutti i casi tranne che perrequire()?