no nó, o arquivo module.js js é usado para executar o module.load system.every toda vez que o nó executa um arquivo, ele quebra o conteúdo do arquivo js da seguinte maneira
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
devido a esse empacotamento dentro do código-fonte ur js, você pode acessar as exportações, requerer, módulo etc. Essa abordagem é usada porque não há outra maneira de obter funcionalidades gravadas no arquivo js para outro.
o nó executa essa função agrupada usando c ++. nesse momento, o objeto exportado que passou para esta função será preenchido.
você pode ver dentro desta função parâmetros de exportação e módulo. Na verdade, exportações é um membro público da função construtora de módulos.
veja o código a seguir
copie esse código em 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();
copie esse código para 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');}
agora execute usando o nó
esta é a saída
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
exportações é [objeto Objeto]
object.keys de foo: name is function () {console.log ('função para exportação de módulos')} função para exportação de módulos
agora remova a linha comentada em a.js e comente a linha acima dessa linha, remova a última linha de b.js e execute.
no mundo javascript, você não pode reatribuir o objeto que passou como parâmetro, mas pode alterar o membro público da função quando o objeto dessa função é definido como parâmetro para outra função
lembre-se
use module.exports on e somente se você quiser obter uma função ao usar exigir palavra-chave. no exemplo acima, var foo = require (a.js); você pode ver que podemos chamar foo como uma função;
é assim que a documentação do nó o explica "O objeto de exportação é criado pelo sistema Module. Às vezes isso não é aceitável, muitos desejam que o módulo seja uma instância de alguma classe. Para isso, atribua o objeto de exportação desejado ao module.exports."