1109 votes

Comment obtenir le chemin vers le script actuel avec Node.js ?

Comment puis-je obtenir le chemin vers le script dans Node.js ?

Je sais qu'il y a process.cwd mais cela ne fait référence qu'au répertoire où le script a été appelé, pas au script lui-même. Par exemple, disons que je suis dans /home/kyle/ et je lance la commande suivante :

node /home/kyle/some/dir/file.js

Si j'appelle process.cwd() j'obtiens /home/kyle/ pas /home/kyle/some/dir/ . Y a-t-il un moyen d'obtenir ce répertoire ?

6 votes

nodejs.org/docs/latest/api/globals.html le lien de documentation de la réponse acceptée.

54voto

Lukasz Wiktor Points 663

Quand il s'agit du script principal, c'est aussi simple que :

process.argv[1]

De la Documentation sur Node.js :

process.argv

Un tableau contenant les arguments de la ligne de commande. Le premier élément sera 'node', le deuxième élément sera le chemin d'accès au fichier JavaScript . Les éléments suivants seront les éventuels arguments supplémentaires de la ligne de commande.

Si vous avez besoin de connaître le chemin d'accès d'un fichier de module, utilisez alors __filename .

3 votes

L'auteur du commentaire négatif pourrait-il expliquer pourquoi cela n'est pas recommandé ?

3 votes

@Tamlyn Peut-être parce que process.argv[1] s'applique uniquement au script principal alors que __filename pointe vers le fichier du module en cours d'exécution. Je mets à jour ma réponse pour souligner la différence. Néanmoins, je ne vois rien de mal à utiliser process.argv[1] . Cela dépend des besoins de chacun.

11 votes

Si le script principal a été lancé avec un gestionnaire de processus node comme pm2 process.argv[1] pointera vers l'exécutable du gestionnaire de processus /usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js

27voto

foobar Points 91
var settings = 
    JSON.parse(
        require('fs').readFileSync(
            require('path').resolve(
                __dirname, 
                'settings.json'),
            'utf8'));

7 votes

Juste une note, à partir de node 0.5 vous pouvez juste demander un fichier JSON. Bien sûr, cela ne répondrait pas à la question.

2 votes

21voto

Hazarapet Tunanyan Points 1458

Chaque programme Node.js a quelques variables globales dans son environnement, qui représentent quelques informations sur votre processus et l'une d'elles est __dirname .

1 votes

Non seulement cette réponse a été donnée des années auparavant, __dirname ne fonctionne plus avec les modules ES .

0 votes

Il s'agit de NodeJs 10, mais cette réponse a été publiée en 2016.

16voto

Dana Harris Points 101

Je sais que c'est assez vieux, et la question originale à laquelle je répondais est marquée comme dupliquée et dirigée ici, mais j'ai rencontré un problème en essayant de faire fonctionner jasmine-reporters et je n'aimais pas l'idée que je devais rétrograder pour que cela fonctionne. J'ai découvert que jasmine-reporters ne résolvait pas le problème du savePath correctement et mettait en fait la sortie du dossier des rapports dans le répertoire jasmine-reporters au lieu du répertoire racine de l'endroit où j'ai lancé gulp. Pour que cela fonctionne correctement, j'ai fini par utiliser la méthode suivante process.env.INIT_CWD pour obtenir le répertoire de travail actuel initial qui devrait être le répertoire où vous avez lancé gulp. J'espère que cela aidera quelqu'un.

var reporters = require('jasmine-reporters');
var junitReporter = new reporters.JUnitXmlReporter({
  savePath: process.env.INIT_CWD + '/report/e2e/',
  consolidateAll: true,
  captureStdout: true
 });

8voto

AbiSivam Points 189

Vous pouvez utiliser process.env.PWD pour obtenir le chemin du dossier actuel de l'application.

6 votes

L'OP demande le "chemin vers le script" demandé. PWD, qui signifie quelque chose comme Process Working Directory, n'est pas cela. De plus, la formulation "application actuelle" est trompeuse.

1 votes

C'est exactement ce que je cherchais, même si c'est une mauvaise réponse à cette question :D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X