en el archivo node js module.js se usa para ejecutar el sistema module.load. cada vez que el nodo ejecuta un archivo, ajusta el contenido del archivo js de la siguiente manera
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
Debido a esta envoltura dentro del código fuente de ur js, puede acceder a exportaciones, requerir, módulo, etc. Este enfoque se utiliza porque no hay otra forma de obtener funcionalidades escritas en el archivo js en otro.
entonces el nodo ejecuta esta función envuelta usando c ++. en ese momento se exportará el objeto exportado que pasó a esta función.
Puedes ver dentro de esta función los parámetros de exportación y módulo. En realidad, las exportaciones es un miembro público de la función de constructor de módulos.
mira el siguiente código
copia este código en 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 este código a 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');}
ahora corre usando el nodo
esta es la salida
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
exportaciones es [objeto objeto]
object.keys of foo: el nombre es function () {console.log ('exportar funciones a módulos')} exportar funciones a módulos
ahora elimine la línea comentada en a.js y comente la línea sobre esa línea y elimine la última línea de b.js y ejecute.
en javascript world no puede reasignar el objeto que pasó como parámetro, pero puede cambiar el miembro público de la función cuando el objeto de esa función se establece como parámetro a otra función
recuerda
use module.exports on y solo si desea obtener una función cuando usa require keyword. en el ejemplo anterior, var foo = require (a.js); puedes ver que podemos llamar a foo como una función;
así es como lo explica la documentación del nodo "El objeto de exportación es creado por el sistema Módulo. A veces esto no es aceptable, muchos quieren que su módulo sea una instancia de alguna clase. Para ello, asigne el objeto de exportación deseado a module.exports".