Webpack 使用网页包中的CommonChunk插件多次评估模块

Webpack 使用网页包中的CommonChunk插件多次评估模块,webpack,webpack-2,Webpack,Webpack 2,我有一个包含多个条目和一个公共块的网页包构建。有时我加载entry1有时加载entry1和entry2,有时加载条目2和条目3。在任何情况下,我总是包含公共块 一切似乎都很好,捆绑的文件也很好。但在运行时似乎存在一个问题。当我需要两个条目时,它们都依赖于某个模块(即公共文件中的模块)。本模块评估两次 简单的例子: entry1.js require('./dep.js'); entry2.js require('./dep.js'); 副秘书长 alert('called') module.

我有一个包含多个条目和一个公共块的网页包构建。有时我加载
entry1
有时加载
entry1
entry2
,有时加载条目2和条目3。在任何情况下,我总是包含公共块

一切似乎都很好,捆绑的文件也很好。但在运行时似乎存在一个问题。当我需要两个条目时,它们都依赖于某个模块(即公共文件中的模块)。本模块评估两次

简单的例子:

entry1.js

require('./dep.js');
entry2.js

require('./dep.js');
副秘书长

alert('called')
module.exports = 2;
在这里,我看到警报呼叫了两次。我希望webpack能做一些类似于
node.js
的事情,并缓存所需的内容

我仔细检查了一下,
deps.js
的内容确实在
common.js
文件中,通过在
警报上放置一个断点
显示同一代码被多次调用。这是预料不到的


有没有办法解决这个问题?

如果这是webpack 4,您应该按照文档中的建议使用。否则,每次根据文档初始化模块:

导入的模块分别针对每个运行时块进行初始化,因此如果在页面上包含多个入口点,请注意此行为。您可能希望将其设置为single或使用另一个配置,该配置只允许您有一个运行时实例


我在vue cli MPA(多页应用程序)上也有同样的问题

除了@Herz3h给出的解决方案外,我还将“runtime”添加到每个页面的块列表中

下面是
vue.config.js
应该是什么样子

module.exports={
页码:{
第1页:{
条目:“src/pages/1/main.js”,
块:[
“区块供应商”,
“块公共”,
'运行时',//确保将其添加到块中
“第1页”,
]
}
},
配置网页包(){
返回{
优化:{
runtimeChunk:'single',
},
}
}
}

我这样做了,代码现在没有被执行,但是页面上没有错误,我可以看到文件被加载,知道为什么吗?好的,我知道了