Quelle est la différence entre process.cwd () et __dirname?


304

Quelle est la différence entre

console.log(process.cwd())

et

console.log(__dirname);

J'ai vu les deux utilisés dans des contextes similaires.

Réponses:


488

process.cwd() renvoie le répertoire de travail actuel,

c'est-à-dire le répertoire à partir duquel vous avez appelé la nodecommande.

__dirname renvoie le nom du répertoire du répertoire contenant le fichier de code source JavaScript


5
Cela signifie-t-il que process.cwd()c'est synonyme de .tous les cas à l'exception de require()?
— Alexander Gonchiy

11
@AlexanderGonchiy correct, .est relatif à process.cwd()(donc aussi), sauf pour require()ce qui fonctionne par rapport au fichier en cours d'exécution. Voir ici pour en savoir plus.
— dwelle

1
Notez que le répertoire de travail actuel peut être modifié au moment de l'exécution à l'aide de process.chdir, donc ce n'est pas toujours le répertoire à partir duquel le nœud a été appelé.
— masterxilo

85

Selon le nœud js doc process.cwd()

cwdest une méthode d'objet global process, retourne une valeur de chaîne qui est le répertoire de travail actuel du processus Node.js.

Selon le nœud js doc __dirname

Nom de répertoire du script en cours sous forme de valeur de chaîne. __dirname n'est pas réellement un global mais plutôt local à chaque module.

Permettez-moi d'expliquer avec un exemple,

supposons que nous ayons un main.jsfichier à l'intérieur C:/Project/main.js et node main.jsque ces deux valeurs retournent le même fichier

ou simplement avec la structure de dossiers suivante

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

supposons que nous ayons un autre fichier script.jsdans un sous-répertoire du projet, c. C:/Project/lib/script.js-à node main.js-d.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

9

Connaître la portée de chacun peut rendre les choses plus faciles à retenir.

processest nodel'objet global de, et .cwd()retourne où le nœud est en cours d'exécution.

__dirnameest modulela propriété de, et représente le chemin du fichier du module. Dans le nœud, un module réside dans un fichier.

De même, __filenameest une autre modulepropriété, qui contient le nom de fichier du module.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.