L'essentiel
Dans Node.js, __dirname
est toujours le répertoire dans lequel réside le script en cours d'exécution ( ver esto ). Ainsi, si vous avez tapé __dirname
en /d1/d2/myscript.js
la valeur serait /d1/d2
.
En revanche, .
vous donne le répertoire à partir duquel vous avez exécuté la commande node
dans votre fenêtre de terminal (c'est-à-dire votre répertoire de travail) lorsque vous utilisez des bibliothèques telles que path
y fs
. Techniquement, il s'agit au départ de votre répertoire de travail, mais il peut être modifié à l'aide de la commande process.chdir()
.
L'exception est lorsque vous utilisez .
con require()
. Le chemin à l'intérieur require
est toujours relative au fichier contenant l'appel à require
.
Par exemple...
Disons que votre structure de répertoire est
/dir1
/dir2
pathtest.js
et pathtest.js
contient
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
et vous le faites
cd /dir1/dir2
node pathtest.js
vous obtenez
. = /dir1/dir2
__dirname = /dir1/dir2
Votre répertoire de travail est /dir1/dir2
donc c'est ce que .
se résout. Puisque pathtest.js
est situé à /dir1/dir2
c'est ce que __dirname
se résout également.
Cependant, si vous exécutez le script à partir de /dir1
cd /dir1
node dir2/pathtest.js
vous obtenez
. = /dir1
__dirname = /dir1/dir2
Dans ce cas, votre répertoire de travail était /dir1
donc c'est ce que .
résolu à le faire, mais __dirname
se résout toujours à /dir1/dir2
.
Utilisation de .
à l'intérieur de require
...
Si à l'intérieur dir2/pathtest.js
vous avez un require
pour inclure un fichier dans dir1
vous toujours faire
require('../thefile')
car le chemin à l'intérieur de require
est toujours relatif au fichier dans lequel vous l'appelez. Cela n'a rien à voir avec votre répertoire de travail.
67 votes
Tl;dr : Donc, fondamentalement, la différence est que './' et 'process.cwd()' font référence au répertoire courant du terminal appelant le script, alors que le '__dirname' fait référence au répertoire dans lequel le script est stocké.
9 votes
Sauf quand
.
est utilisé à l'intérieur derequire
. Le chemin à l'intérieurrequire
est toujours relative au fichier contenant l'appel àrequire
.