这表示在我的项目的webpack从1.x更新到2.6.0后发生。我们有一个名为asyncModules的传统IIFE脚本,它为具有data-module属性的节点执行querySelectorAll,这些脚本必须与asyncModules目录中的一个模块具有相同的名称。它使用require.ensure,然后使用带有data-module属性名称的动态require()。
有人注意到,在更新之后,它被多次调用。似乎在完成所有要求之后,它再次执行脚本(我通过在控制台上打印调试,看到它最多发生3次)。我尝试使用webpack 2的import(),但同样的问题发生了。我尝试直接从主入口点脚本导入它(与更新前相同),包括将有问题的脚本直接导入入口点捆绑包,将其添加到供应商捆绑包中,但仍然存在相同的问题。如果我从该文件中完全删除了动态需求,那么它只会停止发生,然后我的日志显示它只运行一次(应该是这样)。
我已经对代码重复检查了该文件的重复调用,没有找到,如果是这种情况,禁用需求仍然会导致多次执行,但事实并非如此。
我正在使用带有es215设置模块的babel:false。
const moduleElements = document.querySelectorAll('[data-module]')
console.log('asyncModules') //This is how I checked it being executed more than once
for (var i = 0; i < moduleElements.length; i++) {
const el = moduleElements[i]
const name = el.getAttribute('data-module')
require.ensure([], function() {
const Module = require(`./${name}/index`).default
new Module(el)
})
}