webpack的构建流程
大约 2 分钟
Webpack 是一个现代 JavaScript 应用程序的静态模块打包器。它的构建流程可以概括为以下几个主要阶段:
1. 初始化阶段
- 读取配置:Webpack 从 webpack.config.js 或命令行参数中读取配置信息
- 合并配置:将用户配置与默认配置进行合并
- 创建 Compiler 实例:实例化
Compiler对象,这是整个构建过程的核心 - 加载插件:注册并应用用户配置的插件
2. 编译阶段 (Compilation)
- 创建 Compilation 对象:每次构建都会创建一个新的
Compilation对象 - 执行入口点分析:从配置的
entry入口开始分析依赖关系 - 模块解析:
- 使用
enhanced-resolve解析模块路径 - 根据
resolve配置确定模块实际位置
- 使用
- 模块构建:
- 调用相应的
loader处理不同类型的模块 - 将模块转换为 JavaScript 代码
- 递归解析模块的依赖关系
- 调用相应的
3. 优化阶段
- 依赖优化:
Tree Shaking:移除未使用的代码- 作用域提升 (
Scope Hoisting)
- 代码分割:
- 根据
splitChunks配置进行代码分割 - 创建独立的
chunk
- 根据
- 模块串联:将可串联的模块合并以减少代码体积
4. 生成阶段
- 创建 Chunk:根据入口点和代码分割策略生成
chunk - 模板生成:
- 使用
Template系统生成最终代码 - 生成入口点代码
- 生成模块加载运行时代码
- 使用
- 资源生成:根据
output配置生成最终的资源文件
5. 输出阶段
- 文件写入:将生成的资源写入到文件系统
- 统计信息输出:输出构建统计信息
- 清理工作:清理临时资源和缓存
核心概念说明
- Entry:入口点,Webpack 从这里开始构建依赖图
- Module:模块,Webpack 中一切皆模块(JS、CSS、图片等)
- Chunk:代码块,由多个模块组成,是代码合并和分割的基本单位
- Loader:转换器,用于处理非 JavaScript 模块
- Plugin:插件,用于扩展 Webpack 功能
- Output:输出配置,定义如何输出最终资源
整个构建流程是一个高度可配置和可扩展的过程,开发者可以通过配置和插件来定制构建行为。