同じ機能だと思っていたものの、次の 2 つの代替表現の違いを理解しようとしています。
apiRegistry1.js
module.exports = function () {
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var module = fileName.split('.')[0];
apiRegistry[module] = require('../apis/' + module);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
return apiRegistry;
};
対
apiregistry2.js
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var module = fileName.split('.')[0];
apiRegistry[module] = require('../apis/' + module);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
module.exports = apiRegistry;
サーバー.js
var apiRegistry1 = require('./includes/apiregistry1')(); // returns {key: moduledef ..}
var apiRegistry2 = require('./includes/apiregistry2'); //returns {}
apiRegistry1 は期待どおりに動作しますが、2 はそうではありません。あるレベルでは、 1 が関数であり、呼び出されたときに評価されることは理にかなっています。それが機能する理由ですが、モジュール内で値を出力すると常に機能する理由がわかりませんが、モジュールの外部を参照すると機能しません。require がどのように機能するかについて、私が見逃している基本的なものはありますか?