当动态导入存在时,Webpack重新执行入口点脚本

时间:2017-07-05 16:59:45

标签: webpack webpack-2

这表示在我的项目的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)
  })
}

0 个答案:

没有答案