面试官:说下webpack的编译流程?

128 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

经常会被问到webpack的编译流程,首先先了解几个核心概念,再了解具体的编译流程。

核心概念

概念描述
Entry指定webpack开始构建的入口模块
Output指定webpack命名输出的文件以及输出的目录
Module指模块的概念,在webpack中,一切皆模块,一个模块对应一个文件
Chunk代码分割的产物,可以将一些代码打包成一个单独的chunk
Loader模块转换器,Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,需要调用loader对模块原内容进行翻译转换
Plugin扩展插件,可以完成更多编译过程中 loader 不能完成的功能。在 Webpack 构建流程中的特定时机会广播出对应的事件,插件可以监听这些事件的发生,在特定时机做对应的事情
Compiler对象包含了wepack的完整配置(entry、output、loaders等配置),该对象启动时会被实例化,且全局唯一。
Compilation对象代表了一次资源版本构建,每次构建产生一次新的Copilation,从该Copilation对象表现了当前的模块资源,编译生成资源,变化的文件以及被跟踪依赖的状态信息。同时该对象也提供了很多事件回调供插件做扩展。

编译流程

webpack编译流程主要分为三个阶段:初始化,编译和输出阶段

初始化

启动构建

读取与合并配置参数

加载Plugin

实例化Complier

编译

从Entry出发,针对每个Module调用对应Loader翻译文件

再找到该Module依赖的Module,递归地进行编译处理

对编译后的Module组成Chunk及对应资源assets

输出

把编译过程得到的assets输出到文件系统

总结

image.png