Je crée une application Web dans NodeJS et j'implémente mes routes d'API dans des modules séparés. Dans l'un de mes itinéraires, je fais de la manipulation de fichiers et j'ai besoin de connaître le chemin de l'application de base. si j'utilise __dirname
ça me donne le répertoire qui héberge mon module bien sûr.
J'utilise actuellement ceci pour obtenir le chemin de l'application de base (étant donné que je connais le chemin relatif vers le module depuis le chemin de base):
path.join(__dirname, "../../", myfilename)
Existe-t-il un meilleur moyen que d'utiliser ../../
? J'exécute Node sous Windows donc il n'y a pas de process.env.PWD
et je ne veux pas être spécifique à la plateforme de toute façon.
L'approche consistant à utiliser __dirname
est la plus fiable. Il vous donnera toujours le bon répertoire. Vous n'avez pas à vous soucier de ../../
Dans l'environnement Windows car path.join()
s'en occupera.
Il existe cependant une solution alternative. Vous pouvez utiliser process.cwd()
qui retourne le répertoire de travail actuel du processus. Cette commande fonctionne correctement si vous exécutez votre application de nœud à partir du répertoire d'application de base. Cependant, si vous exécutez votre application de nœud à partir d'un répertoire différent, par exemple, son répertoire parent (par exemple node yourapp\index.js)
Alors le mécanisme __dirname
Fonctionnera beaucoup mieux.
J'espère que cela aidera.
Vous pouvez utiliser path.resolve () sans arguments pour obtenir le répertoire de travail qui est généralement le chemin d'accès de l'application de base. Si l'argument est un chemin relatif, il est supposé être relatif au répertoire de travail actuel afin que vous puissiez écrire
require(path.resolve(myfilename));
d'exiger votre module à la racine de l'application.
Vous pouvez définir une variable globale comme dans votre app.js:
global.__basedir = __dirname;
Ensuite, vous pouvez utiliser cette variable globale n'importe où. Comme ça:
var base_path = __basedir