首页 > 解决方案 > 循环内的导入模块是一种不好的做法?

问题描述

我有一个javascript模块,我在我的主/主代码的开头导入它,并在其中执行一个forEach,在这个主代码中有一个调用模块方法的循环:

results.forEach(function(result) {
     for(const item of items .......){
        exampleModule.metodo(result, item)
     }
});

到目前为止一切顺利,问题是模块的值是混合的,根据结果 X 的项目 Y,模块不是动态的,它有点“扰乱”一切......

想了个办法解决,不知道是不是最佳实践,在一个对象中声明 const exampleModule = require('./modules/example.js') 并给那个对象一个引用,比如item ID ,因为每个 ID 都是唯一的:

let objetos = {}
results.forEach(function(result) {
     for(const item of items .......){
        objetos[item.id] = require('./modules/example.js')
        objetos[item.id].metodo(result, item)
     }
});

简而言之,我希望每个循环项都创建一个模块的实例而不会受到干扰,如果我在位置 0 的项中实例化模块,则模块中的所有内容都应该只由该项 0 使用,如果它是项1 同样的事情,1 n 可以改变位置 0 正在使用的模块的值等等,这可能吗?有人可以帮帮我吗?

标签: javascriptnode.js

解决方案


我有同样的想法,检查过一次,但它基本上是一个由 require() 函数返回的单例。

如果你有

jQuery = require('jquery');
jQuery.fn.foobar = function() {
   this.css({color:red});
}

然后在另一个文件中你可以做

$ = require('jquery');
$('hello').foobar();

唯一的条件是您使用的字符串require()是相同的大小写。

require('libs/myModule.js') != require('libs/mymodule.js');

在幕后创建了一张地图:

 objects = {
    'jquery' : ....
    'add' : ....
    'strcasecomp' : ....
    '/www/htdocs/site/libs/myModule.js' : ...
 }

require()如果对象存在于地图中,会发生什么情况,它会被返回。如果不存在,则查找、实例化、映射并返回相关文件。


推荐阅读