Javascript nodejs中的module.exports-fn vs object
我试图理解以下两种我认为是相同功能的替代表示之间的区别 apiRegistry1.jsJavascript nodejs中的module.exports-fn vs object,javascript,node.js,commonjs,Javascript,Node.js,Commonjs,我试图理解以下两种我认为是相同功能的替代表示之间的区别 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('.'
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;
};
vs
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;
server.js
var apiRegistry1 = require('./includes/apiregistry1')(); // returns {key: moduledef ..}
var apiRegistry2 = require('./includes/apiregistry2'); //returns {}
apiRegistry1的行为与我预期的一样,但2没有。在某种程度上,1是一个函数,在调用它时对其求值是有意义的,这就是它工作的原因,但我不理解为什么在模块内打印值总是工作的,而在模块外引用则不行。关于require的工作原理,我是否缺少一些基本的东西?
var module=fileName.split('.')[0]代码>
是罪魁祸首
由于作用域在JavaScript中的工作方式,该module
变量不是for
循环的局部变量,而是整个文件的局部变量。因此,当您在最后使用它时:
module.exports=apiRegistry代码>
您正在自己的模块
变量上设置导出
属性,而不是期望您使用的一个节点。更改为使用其他变量名可以解决您的问题:
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var myModule = fileName.split('.')[0];
apiRegistry[myModule] = require('../apis/' + myModule);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
module.exports = apiRegistry;
啊,我早该抓到的。谢谢