dans le fichier node js module.js est utilisé pour exécuter l'heure module.load system.every lorsque le nœud exécute un fichier, il enveloppe le contenu de votre fichier js comme suit
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
en raison de cet encapsulation dans le code source ur js, vous pouvez accéder aux exportations, exiger, module, etc.
puis le nœud exécute cette fonction encapsulée à l'aide de c ++. à ce moment, les objets exportés qui sont passés dans cette fonction seront remplis.
vous pouvez voir à l'intérieur de cette fonction les exportations et le module des paramètres. en fait, les exportations sont un membre public de la fonction constructeur du module.
regardez le code suivant
copiez ce code dans b.js
console.log("module is "+Object.prototype.toString.call(module));
console.log("object.keys "+Object.keys(module));
console.log(module.exports);
console.log(exports === module.exports);
console.log("exports is "+Object.prototype.toString.call(exports));
console.log('----------------------------------------------');
var foo = require('a.js');
console.log("object.keys of foo: "+Object.keys(foo));
console.log('name is '+ foo);
foo();
copiez ce code dans a.js
exports.name = 'hello';
module.exports.name = 'hi';
module.exports.age = 23;
module.exports = function(){console.log('function to module exports')};
//exports = function(){console.log('function to export');}
maintenant exécuté en utilisant le nœud
c'est la sortie
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
les exportations sont [objet Object]
object.keys of foo: le nom est function () {console.log ('fonction vers module exporte')} fonction vers module exporte
supprimez maintenant la ligne commentée dans a.js et commentez la ligne au-dessus de cette ligne et supprimez la dernière ligne de b.js et exécutez.
dans le monde javascript, vous ne pouvez pas réaffecter un objet passé en paramètre, mais vous pouvez changer le membre public de la fonction lorsque l'objet de cette fonction est défini comme paramètre sur une autre fonction
se souvient
utilisez module.exports sur et uniquement si vous souhaitez obtenir une fonction lorsque vous utilisez le mot clé require. dans l'exemple ci-dessus, nous varons foo = require (a.js); vous pouvez voir que nous pouvons appeler foo en tant que fonction;
c'est ainsi que la documentation du nœud l'explique "L'objet exports est créé par le système Module. Parfois, cela n'est pas acceptable, beaucoup veulent que leur module soit une instance d'une classe. Pour ce faire, affectez l'objet d'exportation souhaité à module.exports."