webpack编译过程
-
初始化
此阶段,webpack会将**CLI参数**、**配置文件**、**默认配置**进行融合,形成一个最终的配置对象。
对配置的处理过程是依托一个第三方库
yargs
完成的 此阶段相对比较简单,主要是为接下来的编译阶段做必要的准备
目前,可以简单的理解为,初始化阶段主要用于产生一个最终的配置
-
编译
-
创建chunk
- 它通过入口找到所有依赖的模块的统称,根据入口模块(默认为
src/index.js
)创建一个chunk - 每个chunk至少都有两个属性
- name:默认为main
- id:唯一编号,开发环境和name相同,生产环境是一个数字,从0开始
- 它通过入口找到所有依赖的模块的统称,根据入口模块(默认为
-
构建所有依赖模块
每个chunk都有一个模块记录,一个模块编译完了之后,会对依赖的模块继续进行编译(模块有缓存如果加载过了就不会加载了)
-
产生chunk assets
在第二步完成之后,chunk中会产生一个模块列表,列表中包含了模块id和模块转换后的代码
接下来,webpack会根据配置为chunk生成一个资源列表,即
chunk assets
,资源列表可以理解为是生成到最终文件的文件名和文件内容
chunk hash是根据所有chunk assets的内容生成的一个hash字符串
hash:一种算法,具体有很多分类,特点是将一个任意长度的字符串转换为一个固定长度的字符串,而且可以保证原始内容不变,产生的hash字符串就不变简图
- 合并chunk assets
将多个chunk的assets合并到一起,并产生一个总的hash
-
-
输出
此步骤非常简单,webpack将利用node中的fs模块(文件处理模块),根据编译产生的总的assets,生成相应的文件。