我得到了一个基本要点,即CommonsChunkPlugin
查看所有入口点,检查它们之间是否存在通用的软件包/依赖项,并将它们分成自己的捆绑包。
因此,假设我具有以下配置:
...
enrty : {
entry1 : 'entry1.js', //which has 'jquery' as a dependency
entry2 : 'entry2.js', //which has 'jquery as a dependency
vendors : [
'jquery',
'some_jquery_plugin' //which has 'jquery' as a dependency
]
},
output: {
path: PATHS.build,
filename: '[name].bundle.js'
}
...
如果我捆绑而不使用 CommonsChunkPlugin
我将得到3个新的捆绑包文件:
entry1.bundle.js
包含来自entry1.js
和的完整代码,jquery
并包含自己的运行时entry2.bundle.js
包含来自entry2.js
和的完整代码,jquery
并包含自己的运行时vendors.bundle.js
包含来自jquery
和的完整代码,some_jquery_plugin
并包含自己的运行时
这显然很糟糕,因为我可能会jquery
在页面中加载3次,因此我们不希望这样做。
如果我捆绑使用 CommonsChunkPlugin
根据我传递给CommonsChunkPlugin
以下任何参数的参数,将会发生:
情况1:如果通过,
{ name : 'commons' }
我将得到以下捆绑文件:entry1.bundle.js
其中包含的完整代码entry1.js
,是的要求,jquery
并且不包含运行时entry2.bundle.js
其中包含的完整代码entry2.js
,是的要求,jquery
并且不包含运行时vendors.bundle.js
其中包含的完整代码some_jquery_plugin
,是的要求,jquery
并且不包含运行时commons.bundle.js
其中包含来自的完整代码jquery
并包含运行时
这样,我们最终得到了一些较小的包,并且包中包含运行时
commons
。不错,但不理想。情况2:如果通过,
{ name : 'vendors' }
我将得到以下捆绑文件:entry1.bundle.js
其中包含的完整代码entry1.js
,是的要求,jquery
并且不包含运行时entry2.bundle.js
其中包含的完整代码entry2.js
,是的要求,jquery
并且不包含运行时vendors.bundle.js
其中包含来自jquery
和的完整代码,some_jquery_plugin
并包含运行时。
同样,通过这种方式,我们最终得到了一些较小的包,但是运行时现在包含在
vendors
包中。由于运行时已包含在vendors
捆绑包中,因此它比以前的情况要差一些。情况3:如果通过,
{ names : ['vendors', 'manifest'] }
我将得到以下捆绑文件:entry1.bundle.js
其中包含的完整代码entry1.js
,是的要求,jquery
并且不包含运行时entry2.bundle.js
其中包含的完整代码entry2.js
,是的要求,jquery
并且不包含运行时vendors.bundle.js
包含来自jquery
和的完整代码,some_jquery_plugin
不包含运行时manifest.bundle.js
其中包含其他所有捆绑包的要求并包含运行时
这样,我们最终得到了一些较小的包,并且包中包含运行时
manifest
。这是理想的情况。
我不了解/不确定我是否了解
在案例2中,为什么我们最终得到了
vendors
既包含通用代码(jquery
)又包含vendors
条目(some_jquery_plugin
)剩余内容的捆绑包?据我了解,CommonsChunkPlugin
这里所做的是它收集了公共代码(jquery
),并且由于我们强制将其输出到vendors
捆绑软件中,因此它有点将公共代码“合并”到vendors
捆绑软件中(现在仅包含来自some_jquery_plugin
)。请确认或解释。在案例3中,我不明白当我们传递
{ names : ['vendors', 'manifest'] }
给插件时发生了什么。为什么/如何vendors
保持捆绑包完好无损,同时包含jquery
和some_jquery_plugin
,何时jquery
显然是常见的依赖关系,以及为什么生成的manifest.bundle.js
文件以创建方式创建(需要所有其他捆绑包并包含运行时)?