chunk是什么

在webpack中,有一个经常会听到的词,那便是 chunk,英文翻译就是 一束一捆 的意思,在webpack里其实就是指 模块的集合,在打包过程中,模块会被合并成chunk,chunk合并成chunk 组,并形成一个通过模块互相连接的图(ModuleGraph)

上面又提到了一个词:chunk组,那这又是什么呢?

bg-pic

chunk的分类

要搞清楚这个概念,就得先理清在webpack里的chunk类型,通常分为两类

举个例子说明这两种类型

1
2
3
4
5
6
7
8
9
10
11
12
/* webpack.config.js */
module.exports = {
entry: './src/index.jsx',
}

/* ./src/index.jsx */
import React from 'react';
import ReactDOM from 'react-dom';

import('./app.jsx').then((App) => {
ReactDOM.render(<App />, root);
})

上面的代码会输出如下两个chunk

对于 non-initial 的chunk我们可以通过 magic comment(魔术注释) 的方式为其命名,示例如下

1
2
3
4
5
6
7
/* ./src/index.jsx */
import(
/* webpackChunkName: "app" */
'./app.jsx'
).then((App) => {
ReactDOM.render(<App />, root)
});

通过这种配置,就可以为non-initial的chunk命名为 app.js,这种看似黑魔法的方式,其实背后是利用 AST 来进行代码分析,从而去获取设置的名称

bg-pic

现在回到最开始的问题:chunk组是什么? 其实答案我相信你已经知道了,因为chunk有non-initial的类型,因此一个chunk可能会被拆分为多个,从而需要chunk组来容纳管理这些chunk

如何修改chunk的名称

其实对于chunk名称的调整除了通过魔术注释的方式,还可以通过配置 output 来实现,具体如下

还可以通过 占位符 的方式来辅助命名chunk,常用的如下

结语

最近一段时间在对webpack的梳理中,发现了太多细碎的知识点了,这也是我最开始一直不想深入研究它的原因 = =。但既然选择了这条路,那么【Webpack系列】就会一直更新下去,帮助自己,也帮助需要帮助的人~