In der Datei js module.js wird die Datei module.load system ausgeführt. Jedes Mal, wenn der Knoten eine Datei ausführt, wird der Inhalt Ihrer js-Datei wie folgt umbrochen
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
Aufgrund dieser Umhüllung in Ihren js-Quellcode können Sie auf Exporte, Anforderungen, Module usw. zugreifen. Dieser Ansatz wird verwendet, da es keine andere Möglichkeit gibt, Funktionen, die in js-Dateien geschrieben wurden, in eine andere zu übertragen.
Dann führt der Knoten diese umschlossene Funktion mit c ++ aus. In diesem Moment werden exportierte Objekte, die an diese Funktion übergeben wurden, gefüllt.
Sie können in dieser Funktion Parameter Exporte und Modul sehen. Tatsächlich ist Exporte ein öffentliches Mitglied der Modulkonstruktorfunktion.
Schauen Sie sich den folgenden Code an
Kopieren Sie diesen Code in 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();
Kopieren Sie diesen Code nach 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');}
Jetzt mit Knoten ausführen
Dies ist die Ausgabe
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
Export ist [Objekt Objekt]
object.keys von foo: name is function () {console.log ('Funktion zum Modul-Export')} Funktion zum Modul-Export
Entfernen Sie nun die kommentierte Zeile in a.js und kommentieren Sie die Zeile über dieser Zeile. Entfernen Sie die letzte Zeile von b.js und führen Sie sie aus.
In der Javascript-Welt können Sie ein als Parameter übergebenes Objekt nicht neu zuweisen, aber Sie können das öffentliche Element der Funktion ändern, wenn das Objekt dieser Funktion als Parameter für eine andere Funktion festgelegt wurde
erinnere dich
Verwenden Sie module.exports nur dann, wenn Sie bei Verwendung des Schlüsselworts require eine Funktion erhalten möchten. im obigen Beispiel var foo = require (a.js); Sie können sehen, dass wir foo als Funktion aufrufen können.
So erklärt die Knotendokumentation: "Das Exportobjekt wird vom Modulsystem erstellt. Manchmal ist dies nicht akzeptabel. Viele möchten, dass ihr Modul eine Instanz einer Klasse ist. Weisen Sie dazu das gewünschte Exportobjekt module.exports zu."