Question Comment puis-je obtenir le chemin d'accès au script en cours avec Node.js?


Comment aurais-je le chemin du script dans Node.js?

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

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

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


712
2018-06-28 14:31


origine


Réponses:


Je l'ai trouvé après avoir regardé à nouveau la documentation. Ce que je cherchais, c'était le __filename et __dirname variables au niveau du module.


1012
2018-06-28 14:39



Donc, fondamentalement, vous pouvez le faire:

fs.readFile(path.resolve(__dirname, 'settings.json'), 'UTF-8', callback);

Utilisez resolve () au lieu de concaténer avec '/' ou '\' sinon vous rencontrerez des problèmes multiplateformes.

Remarque: __nomdirect est le chemin d'accès local du module ou du script inclus. Si vous écrivez un plugin qui doit connaître le chemin du script principal, c'est:

require.main.filename

ou, juste pour obtenir le nom du dossier:

require('path').dirname(require.main.filename)

187
2017-09-08 18:40



Cette commande retourne le répertoire courant:

var currentPath = process.cwd();

Par exemple, pour utiliser le chemin pour lire le fichier:

var fs = require('fs');
fs.readFile(process.cwd() + "\\text.txt", function(err, data)
{
    if(err)
        console.log(err)
    else
        console.log(data.toString());
});

51
2017-10-23 07:17



Utilisez __dirname !!

__dirname

Le nom du répertoire du module actuel. C'est la même chose que le path.dirname () du __filename.

Exemple: exécution du noeud example.js à partir de / Users / mjr

console.log(__dirname);
// Prints: /Users/mjr
console.log(path.dirname(__filename));
// Prints: /Users/mjr

https://nodejs.org/api/modules.html#modules_dirname


38
2017-12-22 14:30



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

process.argv[1]

Du Documentation 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 vers le fichier JavaScript. Les éléments suivants seront des arguments de ligne de commande supplémentaires.

Si vous avez besoin de connaître le chemin d'un fichier de module, utilisez __nom de fichier.


34
2017-12-17 10:41



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

26
2017-11-05 05:41



Chaque programme Node.js a quelques variables globales dans son environnement, ce qui représente quelques informations sur votre processus et l'un d'eux est __dirname.


24
2018-05-25 21:27