Webpack原理
一、是什么
Webpack 是一个模块打包工具(Bundler),将多个模块打包成浏览器可运行的资源。
二、核心流程
-
初始化
读取配置:webpack.config.js
-
构建依赖图
从入口开始:index.js → import → 解析 → AST → 收集依赖
-
Loader 处理
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
},
];
}
👉 本质:文件转换器
- Plugin 扩展
plugins: [new HtmlWebpackPlugin()];
👉 本质:生命周期钩子扩展
-
打包输出
生成:
- bundle.js
- chunk 文件
三、核心原理
1. AST 解析
import { parse } from '@babel/parser';
步骤:
- 代码 → AST
- 遍历 AST
- 找到 import/export
2. 依赖收集
{
'./index.js': ['./a.js', './b.js']
}
3. 模块封装
(function (modules) {
function require(id) {}
})();
4. Loader机制
执行顺序:
从右到左(或从下到上)
5. Plugin机制(Tapable)
Webpack 使用 Tapable 实现:
compiler.hooks.emit.tap();
四、优缺点
优点
- 生态丰富
- 功能强大
缺点
- 构建慢
- 配置复杂
五、总结
Webpack本质:
基于依赖图的模块打包器 + 插件化架构