Ein Node-Modul arbeitet im Grunde wie folgt:
var module = {
exports: {}
};
(function (exports, require, module, __filename, __dirname) {
// your module code here
})(module.exports, require, module, __filename, __dirname);
var exported = module.exports;
standardmäßig exports
und module.exports
zeigen beide auf das gleiche Objekt. Sie können dem Objekt Eigenschaften als normal hinzufügen. Was aber, wenn Sie eine Funktion oder ein anderes Objekt anstelle des Standardobjekts zurückgeben möchten?
In diesem Fall können Sie module.exports
auf etwas anderes setzen, und das wird das neue exportierte Objekt sein.
module.exports = function() {};
Und natürlich kann diese Funktion Eigenschaften haben, so dass Ihr Code ist eine Art-of wie folgt aus:
module.exports = function(){};
module.exports.compile = function() {};
module.exports.format = function() {};
module.exports.token = function() {};
, die gleich sein würde:
var morgan = function() {};
var compile = function() {};
var format = function() {};
var token = function() {};
morgan.compile = compile;
morgan.format = format;
morgan.token = token;
module.exports = morgan;
Wie wird eine Funktion (morgan) module.exports zugewiesen? Nachdem die erste Zeile ausgeführt wurde, ist module.exports eine Funktion anstelle eines JSON-Objekts?
Ja, module.exports
wird eine Funktion, anstelle des Standardobjekt sein (jedoch gibt es keine JSON hier, ist JSON kein JavaScript-Objekt, sondern ein Codierungsformat).
Ich lese, dass "Nodejs Modul Verwirrung exportiert". (wäre +1 gewesen) – sweaver2112