本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-02-26
Entry
:入口,Webpack
执行构建的第一步将从Entry
开始,可抽象成输入。Module
:模块,在 Webpack
里一切皆模块,一个模块对应一个文件。Webpack
会从配置的Entry
开始,递归找出所有依赖的模块。Chunk
:代码块,一个Chunk
由多个模块组合而成,用于代码合并与分割。Loader
:模块转换器,用于将模块的原内容按照需求转换成新内容。Plugin
:扩展插件,在 Webpack
构建流程中的特定时机会广播对应的事件,插件可以监听这些事件的发生,在特定的时机做对应的事情。初始化参数:从配置文件和 Shell
语句中读取与合并参数,得出最终的参数。
开始编译:用上一步得到的参数初始化 Compiler
对象,加载所有配置的插件,通过执行对象的run方法开始执行编译。
确定入口:根据配置中的Entry
找出所有入口文件。
编译模块:从入口文件触发,调用所有配置的Loader
对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。
完成模块编译:在经过第4步使用 Loader
翻译完所有模块后,得到了每个模块被翻译后的最终内容及它们之间的依赖关系。
输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的chunk
,再将每个chunk
转换成一个单独的文件加入输出列表中,这是可以修改输出的最后机会。
输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,将文件内容写入文件系统中。
在以上的过程中,Webpack
会在特定的时间点广播特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack
提供的 API
改变的 Webpack
的运行结果。
Webpack
的构建流程可以分为以下三大阶段:初始化、编译阶段、输出阶段;
启动构建,读取与合并配置参数,加载Plugin
,实例化Complier
。
该阶段会发生的事件及解释如下:
从Entry
发出,针对每个Module
串行调用对应的Loader
去翻译文件的内容,再找到该Module
依赖的Module
,递归地进行编译处理。
该阶段会发生的事件及解释如下:
在编译阶段中,最重要的事件是compilation
,因为在compilation
阶段调用了Loader
,完成了每个模块的转换操作。在compilation
阶段又会发生很多小事件,如下。
输出:将编译后的 Module
组合成 Chunk
,将Chunk
转换成文件,输出到文件系统中。
该阶段会发生的事件及解释如下:
在输出阶段己经得到了各个模块经过转换后的结果和其依赖关系,并且将相关模块组合在一起形成一个个Chunk
。在输出阶段会根据Chunk
的类型,使用对应的模板生成最终要要输出的文件内容。