Nom du fichier en cours d'exécution

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0
Auteur du sujet

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.

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+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.

Édité par andre9642

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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