2

同じ機能だと思っていたものの、次の 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 がどのように機能するかについて、私が見逃している基本的なものはありますか?

4

1 に答える 1