2016-05-23 21 views
1

Ich habe eine Verwechslung mit module.exports. Soweit ich verstand module.exports ist ein Objekt, das mit anderen Modulen ausgesetzt ist,Nodejs Modul exportiert Verwirrung

exports=module.exports={} 

Aber in dem index.js von morgan Paket in node.js ich diese gefunden.

module.exports = morgan 
module.exports.compile = compile 
module.exports.format = format 
module.exports.token = token 

morgan, compile, format und token sind alle Funktionen.

Können Sie erklären, was hier passiert? Wie wird eine Funktion (morgan) module.exports zugewiesen? Nachdem die erste Zeile ausgeführt wurde, ist module.exports eine Funktion anstelle eines JSON-Objekts?

+0

Ich lese, dass "Nodejs Modul Verwirrung exportiert". (wäre +1 gewesen) – sweaver2112

Antwort

3

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

+0

Nachdem diese 4 Zeilen ausgeführt wurden, können Sie mir sagen, wie die Module.exports aussehen würden? – MYGz

+0

@MohammadYusufGhazi Es wäre ein Funktionsobjekt mit 3 Funktionsobjekteigenschaften. –

+0

also Format, Kompilieren und Token werden Funktionsvariablen von module.exports, die eine Funktion ist? – MYGz

0

module.exports ist ein Objekt, das anderen Modulen und Dateien ausgesetzt ist. Dies ermöglicht eine bequeme Möglichkeit, Variablen, Funktionen und mehr Javascript-Funktionen zu exportieren.

Wie Sie in here sehen können, wenn Sie eine Variable auf {} initialisieren, initialisieren Sie ein Objekt.

Ein Objekt kann Variablen und Funktionen enthalten, das ist eines der Dinge, die Javascript wirklich cool machen. Sie können problemlos komplexe Objekte mit Funktionen als Parameter übergeben und wirklich sauberen Code ausführen.

Also, Kurzgeschichte, denken über module.exports als ein Objekt, das zu anderen Modulen und Dateien mit Variablen und Funktionen ausgesetzt ist. Genauso wie ein objektorientiertes Objekt als Parameter in Java oder Ruby übergeben wird.

Hier ist leicht erklärt: Read More

1

Sie könnten diese Antwort für eine tiefer gehende Erklärung lesen möchten:

What is the purpose of node js module exports and how do you use it?

Morgan einfach ist das Hinzufügen von Parametern an das Modul exportiert werden (in In diesem Fall compile, format und token Wenn Sie das Modul in Ihrer Anwendung benötigen, die etwas wie morgan = require('morgan') verwendet, können Sie morgan.format aufrufen, um das Format zurückzugeben, das an das Objekt angehängt wurde t.

Hoffe, dass die Dinge ein wenig aufräumt!

+0

Nachdem diese 4 Zeilen ausgeführt werden, können Sie mir sagen, wie die module.exports aussehen würden? – MYGz

0

Können Sie erklären, was hier passiert?

Eine Zuordnung Anweisung passiert.

// path-to-my-module.js 
module.exports = morgan 
module.exports.compile = compile 
module.exports.format = format 
module.exports.token = token 

Für jede dieser 4 Anweisungen gibt es eine Zuweisungsanweisung.Mit Blick auf die erste Zeile, module.exports = morgan, das würde bedeuten, das module.exportsObjekt wird eine Eigenschaft morgan genannt haben, mit dessen Wert den Wert der Kennung ist morgan

Also, wenn Sie es wie folgt verwendet werden:

var m = require('./path-to-my-module.js'); 
console.log(m.morgan); 
console.log(m); 
Verwandte Themen