⚡ 30 秒速记
- 核心判断:构建工具从入口解析依赖图,经转换和优化生成可在目标运行时加载的模块与资源
- 原理主线:围绕 「核心机制」、「执行链路」、「边界与实践」 建立输入、状态变化与输出之间的因果关系
- 文章范围:系统解析了Webpack4的打包机制,包括依赖分析、模块打包流程、Loader与Plugin的作用、AST解析与代码转换等核心原理,帮助开发者深入理解Webpack4如何实现高效的前端资源打包与优化。
- 边界与代价:静态分析受模块语法、动态依赖和副作用声明限制;拆包过细也会增加请求和运行时成本
- 工程落地:优化前先测构建阶段、产物组成和缓存命中,再针对解析、转换、压缩或运行时逐层处理
Webpack 从入口递归解析模块依赖,经 Loader 转换后形成依赖图,再组装为可由运行时加载的 Chunk 和资源文件。 简单来说,单文件先被解析和转换,随后沿着 import 关系不断发现新模块,直到入口关联的依赖全部处理完。生成阶段会把模块代码、依赖映射以及类似 require 的加载逻辑放进产物,插件则通过构建钩子介入并改变结果。单入口示例能说明基本模型,但真实工程还要考虑分包、优化和多种资源类型。
这篇文章不要按 API 清单来背。先用上面的 Mind Map 建立全局结构,再通过交互 DEMO 观察正常路径和边界路径如何改变状态;阅读正文时重点核对每一步的输入、负责执行的参与者、产生的中间状态以及最终可观察结果。遇到版本敏感结论,要把“历史实现”“当前行为”和“工程兼容策略”分开说明;遇到性能或架构取舍,则用实际指标、失败现象和验证手段支撑判断。
版本校准: 旧文中的 webpack 4、JSONP 更新清单或 react-hot-loader 代码用于解释历史链路,不应直接复制到新项目。当前 webpack-dev-server 4+ 默认启用 HMR,严格 ESM 可使用 import.meta.webpackHot;生产环境不得携带 HMR runtime。以 webpack HMR 官方指南 和项目锁定版本为准。
webpack是一个打包模块化JavaScript的工具,在webpack里一切文件皆模块,通过Loader转换文件,通过Plugin注入钩子,最后输出由多个模块组合成的文件。webpack专注于构建模块化项目。
# 简单版打包模型步骤
我们先从简单的入手看,当 webpack 的配置只有一个出口时,不考虑分包的情况,其实我们只得到了一个bundle.js的文件,这个文件里包含了我们所有用到的js模块,可以直接被加载执行。那么,我可以分析一下它的打包思路,大概有以下4步:
- 利用
babel完成代码转换及解析,并生成单个文件的依赖模块Map - 从入口开始递归分析,并生成整个项目的依赖图谱
- 将各个引用模块打包为一个立即执行函数
- 将最终的
bundle文件写入bundle.js中