nel nodo js module.js viene utilizzato per eseguire il modulo module.load. ogni volta che il nodo esegue un file, avvolge il contenuto del file js come segue
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
a causa di questo wrapping all'interno del tuo codice sorgente js puoi accedere ad esportazioni, richieste, moduli, ecc. questo approccio è usato perché non c'è altro modo per ottenere le funzionalità scritte nel file js su un altro.
quindi il nodo esegue questa funzione incartata usando c ++. in quel momento verranno riempiti gli oggetti esportati passati in questa funzione.
all'interno di questa funzione è possibile vedere i parametri di esportazione e modulo. attualmente l'export è un membro pubblico della funzione di costruzione del modulo.
guarda il seguente codice
copia questo codice 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();
copia questo codice su 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');}
ora eseguito usando il nodo
questo è l'output
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
export è [oggetto oggetto]
object.keys di foo: name is function () {console.log ('funzione per esportare i moduli')} funzione per esportare i moduli
ora rimuovi la riga commentata in a.js e commenta la riga sopra quella riga e rimuovi l'ultima riga di b.js ed esegui.
nel mondo javascript non è possibile riassegnare l'oggetto passato come parametro ma è possibile modificare il membro pubblico della funzione quando l'oggetto di quella funzione è impostato come parametro su un'altra funzione
ricorda
usa module.exports su e solo se vuoi ottenere una funzione quando usi richiedi parola chiave. nell'esempio sopra abbiamo var foo = require (a.js); puoi vedere che possiamo chiamare foo come una funzione;
questo è il modo in cui la documentazione del nodo lo spiega "L'oggetto export viene creato dal sistema Module. A volte questo non è accettabile, molti vogliono che il loro modulo sia un'istanza di una classe. Per fare ciò assegnare l'oggetto di esportazione desiderato a module.exports."