web-dev-qa-db-fra.com

Chemin de base de l'application à partir d'un module dans NodeJS

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.

29
Clint Powell

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.

22
Tom

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.

3
Samuli Asmala

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
0
Hayreddin Tüzel