在webpack中的多个编译器configuration中提取常用块?

我正在尝试webpack中的多编译器选项,并按照他们的github上的例子 。 但是,我似乎无法理解如何在多个configuration中拆分通用代码。

例如,我可能在不同的configuration集中使用相同的供应商库。 我希望将这些共享代码捆绑到一个共同的文件中。

我尝试了以下内容,但是最终为每个编译configuration创build了单独的vendors条目捆绑包。

 var path = require("path"); var webpack = require("webpack"); module.exports = [ { name: "app-mod1", entry: { vendors: ['jquery', 'react', 'react-dom'], pageA: ['./mod1/pageA'], pageB: ['./mod1/pageB'] }, output: { path: path.join(__dirname, "/mod1/js"), filename: "[name].bundle.js" }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ names: ['vendors'], minChunks: Infinity }) ] }, { name: "app-mod2", entry: { vendors: ['lodash', 'react', 'react-dom'], pageA: ['./mod2/pageA'], pageB: ['./mod2/pageB'] }, output: { path: path.join(__dirname, "/mod2/js"), filename: "[name].bundle.js" }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ names: ['vendors'], minChunks: Infinity }) ] } ]; 

由于反应,react-dom是在两个编译之间共享的,我的目的是将它们捆绑为一个可以共享的文件,而不是为每个编译创build一个相同的包。

如何从多个编译器configuration中提取常用块?

简单的回答

你不能以你想要的方式去做那件事。

TL; DR

@Carven,恐怕你无法通过MultiCompiler的MultiCompiler实现你的目标, MultiCompiler并不意味着要做这个工作,至less对于附近的function来说。

查看启动MultiCompiler实例的源代码 ,它实际上启动了独立的Compiler实例。 这些编译器之间没有数据共享。

另请参阅运行MultiCompiler实例的源代码 ,编译器实例也单独运行而不共享数据。

这些编译器共享的唯一的东西是它们生成并合并到MultiStatsStats实例。

顺便说一句, 你提到的例子中没有线索,有些模块在多编译器之间共享。

替代

正如@ Tzook-Bar-Noy所述,恕我直言,你必须使用多条目实现MPA(多页面应用)绑定。

其他值得一提的

我注意到一个名为webpack-multi-configurator的库正在使用多编译器function。 但我不认为它会分享共同的块。

我现在已经知道了,这个话题在webpack文档中似乎很难理解。 我设法创build了一些有用的东西,因为它创build了2个独立的文件,并将常见的依赖关系提取到另一个文件中。

这是我的webpackconfiguration:

 { entry: { pageA: "./first/first", pageB: "./second/second" }, output: { path: path.join(__dirname, "js"), filename: "[name].js" }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ names: ["vendor", "common"], }) ] }; 

这个的输出将是:

 ./js/ common.js vendor.js pageA.js pageB.js 

我用我工作的例子创build了一个回购: https : //github.com/tzookb/webpack-common-vendor-chunks

当我打开一个新的HTML文件我加载这些文件:

  first page: common.js vendor.js pageA.js sec page: common.js vendor.js pageB.js