nodejs中的module.exports – fn vs object
我试图理解以下两个替代表示之间我认为是相同的function之间的区别。
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; };
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是一个函数,并在被调用时进行评估,这就是为什么它的工作原理,但我不明白为什么打印模块内的值始终工作,但引用它之外。 有什么基本的关于如何需要我失踪的作品?
var module = fileName.split('.')[0];
是罪魁祸首。
由于JavaScript在JavaScript中的工作原理,该module
variablesfor
循环来说不是本地的for
而是整个文件。 因此,当你最后使用它时:
module.exports = apiRegistry;
您正在设置您自己的module
variables,而不是一个节点的exports
属性期望您使用。 更改为使用另一个variables名称可以解决您的问题:
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;
- 从同一个文件中获取module.exports
- React Native如何要求(moduleName)工作?
- Typescript:从另一个模块的类中添加一个方法/从不同模块填充一个名称空间
- CommonJS singelton模块中的循环依赖
- 什么javascript模块api duojs使用?
- 加载“香草”Javascript库到Node.js ='意外的令牌导出'
- 如果一个nodejs模块将一个对象导出到另外两个模块,那么对一个下游模块中的该对象所做的更改会传播给另一个模块吗?
- 骨干localStorage不使用良好的同步方法
- 在尝试从已经初始化的伪javascript类中修改“this”对象时遇到了很多麻烦