Nom du fichier en cours d'exécution

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

Aujourd'hui, une question à la con. Comme l'indique le titre, j'aimerais pouvoir obtenir le nom du fichier en cours d'exécution dans un script Node.js.

La solution qu'on voit partout et qu'on trouve en 10 secondes sur stack est simplement une des variables module.filename ou plus simplement __filename. Mais ce n'est pas réellement ce que je souhaite.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// foo.js
module.exports.hello = function(){
console.log(module.filename);
};

// bar.js
var foo = require('./foo');
foo.hello(); // C:\...\foo.js

// bat.js
var foo = require('./foo');
foo.hello(); // C:\...\foo.js

Dans les deux cas où j'appelle foo.hello, ça m'affiche le chemin vers foo.js. Or je souhaiterais que ça m'affiche respectivement le chemin de bar.js et bat.js.

Si je passe module.filename en paramètre de la fonction hello, évidemment, ça marche. Mais j'aimerais ne pas avoir à toucher à bar.js et bat.js.

Est-ce que c'est possible ?

Merci pour vos réponses.

+0 -0

Dans foo.js, à la place de module.filename, mets-y require.main.filename.

Ca n'a pas l'air de marcher dans mon cas, j'obtiens toujours le chemin vers foo.js avec require.main.filname à la place de module.filename.

Par contre, je n'ai peut-être pas choisi suffisament judicieusement mon exemple. La réalité est plus proche du code ci-dessous et peut-être que ça change tout en fait :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// foo.js
module.exports.hello = function(){
console.log(module.filename);
};

require('./bar');
require('./bat');

// bar.js
hello();

// bat.js
hello();

Merci.

+0 -0

Par contre, je n'ai peut-être pas choisi suffisament judicieusement mon exemple. La réalité est plus proche du code ci-dessous et peut-être que ça change tout en fait :

Oui, effectivement.

En faisant joujou avec l'objet global process, j'en suis venu à obtenir process.mainModule.children[process.mainModule.children.length-1]['filename'] (au lieu de module.filename. Mais il doit y avoir mieux… Ça me semble toutefois répondre à ton problème.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte