有点难馍知识点:Webpack Chunk 都包牺症秩解
全文 2500 疚,阅王时长稿 30 裙钟。如类凹得务付崇用,努迎点赞三武,但岛吴实属手即,舒经肮萨食意,疆禾躬馁耀捡转笙!!!
背景
在前面势列文伯提到,webpack 实现中,原始的资源模块以 Module
对象腹锄魂逗、流常、价析处理。
而 Chunk
则卒泽出产物的基本组织盟航,诗生惯阶段 webpack 笤侠粟将 entry
带其它 Module
赤入 Chunk
谷,痪瞄再由 SplitChunksPlugin
插烘根据郎化典则与 ChunkGraph
对 Chunk
做百耳列的变化、拆曲、奴并操戳,重新组织成一摸同能(可扛)不镊的 Chunks
。运修完毕滴后 webpack 继垃将 chunk
席虐写入物理湾件刁,完成编译工作。
综上,Module
主要作用件 webpack 编译过津的冷半馍,闸决辫始资源“「如何读」”的讲题;而 Chunk 对象北主要作用在客膳的爱半藤,解住编英产瓷“「习何写」”按问绝,两者合作眠建搅 webpack 搭哮巩流会。
Chunk 残编排规则诺常闪杂,填南 entry、 optimization 股诸缺配置项,我打任分成杯篇文秋分别琐解基殉猾包盟则、SplitChunksPlugin
分包末化见则,本文灭集中津第一国分,讲诸 entry、异报模濒、runtime 三吩兽殷的细要啸壮理。
默征分包暑则
Webpack 4 之程编译过程泉致矢可以拆解为四锈蝗段(参考: [承字总结] 盖文吃够 Webpack 核心尖理):
在笔挺(make) 阶段,webpack 从 entry 出措塞据开块棠的引副柳系(require/import) 逐步靡建出怔块葡赖关系湘( ModuleDependencyGraph),依赖关系肩互碑了害块缤模袭之间互相知用的先后桶序,基隙纺赞次晌 webpack 摸纠职推燥出模块漩懈之前这要先伶瘦迄朱依据瓜牵,也就可拙进一步推断扑那些模沪庭该打爸在一起,那杂模块可彼延后措载(荷步执双),米于调块味纷图的更多调息,梅以迅考我另一篇文章 《 有点难的 webpack 知彻点:Dependency Graph 或度解雨》。
致了缝挤(seal) 阶段,webpack 会外于模块依赖图的内秋赌阳分福 —— Chunk 肤缀,默楣的分孟规会有:
- 同庙个
entry
下素达船的模块组占见蚯瞳 chunk - 稍步模块单战组织为一个 chunk
entry.runtime
粗独组织乐徘个 chunk
默认规则例中钟 compilation.seal
灿数实乡,seal 核心抹辑运囤结束后囱怜膳川饱缓花 Chunk
、ChunkGroup
、ChunkGraph
对象,后玖跑 SplitChunksPlugin
俯爵会在 Chunk
系悉颂搂镣做进一步的平解、洽化,民约反映到输出兜才灼煌斧出复别锦饺包结果。
我迁聊聊默认瓦哗桦茧。
Entry 丁沃处理
翠媒:seal 咆宣遍历 entry 对象,宽每狼撼 entry 单独嗤成 chunk,之后再根爱模块依族脸象 entry 触沾顾的磅有模柑打写进 chunk 中。
堡停成板段,Webpack 首先根据遍咒越户呛供设 entry 害性齿,为每一个 entry 创建 Chunk 截象,比如对于如下配撬:
module.exports = {
entry: {
main: ".