La risposta di Renee è ben spiegata. Aggiunta alla risposta con un esempio:
Node fa molte cose al tuo file e una delle cose importanti è WRAPPING il tuo file. All'interno del codice sorgente di nodejs viene restituito "module.exports". Facciamo un passo indietro e comprendiamo l'involucro. Supponi di averlo fatto
saluto.js
var greet = function () {
console.log('Hello World');
};
module.exports = greet;
il codice sopra è racchiuso come IIFE (Espressione di funzione immediatamente invocata) all'interno del codice sorgente di nodejs come segue:
(function (exports, require, module, __filename, __dirname) {
var greet = function () {
console.log('Hello World');
};
module.exports = greet;
}).apply();
return module.exports;
e la funzione precedente viene invocata (.apply ()) e restituita module.exports. In questo momento module.exports ed export che puntano allo stesso riferimento.
Ora, immagina di riscrivere Greet.js come
exports = function () {
console.log('Hello World');
};
console.log(exports);
console.log(module.exports);
l'uscita sarà
[Function]
{}
il motivo è: module.exports è un oggetto vuoto. Non abbiamo impostato nulla a module.exports, piuttosto abbiamo impostato export = function () ..... nel nuovo greet.js. Quindi, module.exports è vuoto.
Tecnicamente export e module.exports dovrebbero puntare allo stesso riferimento (è corretto !!). Ma usiamo "=" quando assegniamo function () .... alle esportazioni, che crea un altro oggetto nella memoria. Quindi, module.exports ed export producono risultati diversi. Quando si tratta di esportazioni, non possiamo ignorarlo.
Ora, immagina di riscrivere (questo si chiama Mutazione) greet.js (riferendosi alla risposta di Renee) come
exports.a = function() {
console.log("Hello");
}
console.log(exports);
console.log(module.exports);
l'uscita sarà
{ a: [Function] }
{ a: [Function] }
Come puoi vedere module.exports ed export puntano allo stesso riferimento che è una funzione. Se imposti una proprietà sulle esportazioni, verrà impostata su module.exports perché in JS gli oggetti vengono passati per riferimento.
La conclusione è sempre utilizzare module.exports per evitare confusione. Spero che sia di aiuto. Buona codifica :)
module.exports
.