在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实例的源代码 ,编译器实例也单独运行而不共享数据。
这些编译器共享的唯一的东西是它们生成并合并到MultiStats
的Stats
实例。
顺便说一句, 你提到的例子中没有线索,有些模块在多编译器之间共享。
替代
正如@ 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