J'apprends comment fonctionne la fonction require()
de NodeJS pour mieux comprendre l'écosystème des nœuds.Erreur NodeJS lorsque j'ai besoin d'un module._compile
J'ai écrit un script qui utilise module._compile pour compiler un script. Quand j'essaie de require()
dans la chaîne, il rechigne ... mais il semble avoir les bons chemins. Qu'est-ce que je fais mal?
Je suppose que cela vaut la peine de mentionner que j'ai le module json3
installé dans le même répertoire dans ./node_modules/
.
Le script
j'ai écrit ce script, qui fonctionne - jusqu'à ce que je décommentez la ligne qui est marqué.
"use strict";
var json3 = require('json3');
console.log("require.main.filename:", require.main.filename);
console.log("require.main:", require.main);
var module = new module.constructor();
module._compile(`
"use strict";
console.log("require.main.filename:", require.main.filename);
console.log("require.main:", require.main);
// When I uncomment this, it breaks. Why?
//var json3 = require('json3');
module.exports = {
run: function() { console.log("It works!") }
};
`, require.main.paths[0]);
module.exports.run();
Script sortie
est ici la sortie (lorsque le code de problème est commenté). require.main.filename: /home/user/tmp/tmp.js require.main: Module { id: '.', exports: {}, parent: null, filename: '/home/user/tmp/tmp.js', loaded: false, children: [ Module { id: '/home/user/tmp/node_modules/json3/lib/json3.js', exports: [Object], parent: [Circular], filename: '/home/user/tmp/node_modules/json3/lib/json3.js', loaded: true, children: [], paths: [Array] } ], paths: [ '/home/user/tmp/node_modules', '/home/user/node_modules', '/home/node_modules', '/node_modules' ] } require.main.filename: /home/user/tmp/tmp.js require.main: Module { id: '.', exports: {}, parent: null, filename: '/home/user/tmp/tmp.js', loaded: false, children: [ Module { id: '/home/user/tmp/node_modules/json3/lib/json3.js', exports: [Object], parent: [Circular], filename: '/home/user/tmp/node_modules/json3/lib/json3.js', loaded: true, children: [], paths: [Array] } ], paths: [ '/home/user/tmp/node_modules', '/home/user/node_modules', '/home/node_modules', '/node_modules' ] } It works!
Pourquoi pas le module dans le ad hoc charge du module?
En fin de compte, cela m'a donné tout ce dont j'avais besoin. Merci! Dans le cas où quelqu'un venant ici est également intéressé, vous pouvez ajouter des variables au module comme vous le souhaitez: en dehors du module, utilisez _module.stuff = mystuff; et à l'intérieur du module y accéder avec module.stuff; –