# Webpack 原理简介

为了理解原理，翻译学习了 [《深入浅出Webpack 工作原理》](http://webpack.wuhaolin.cn/5%E5%8E%9F%E7%90%86/5-1%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E6%A6%82%E6%8B%AC.html)

## 基本概念

* Entry: 入口，Webpack执行构建的第一步从Entry开始，输入入口。
* Module: 模块，在Webpack中一切皆模块，一个模块对应一个文件。Webpack会从配置的Entry 开始递归找出所有依赖的模块。
* Chunk：代码块，一个Chunk由多个模块组合而成，用于代码合并与分割。
* Loader：模块转换器，用于把模块原来内容依照需求转换成新内容
* Plugin：扩展插件，在Webpack构建流程中的特定时机会广播对应的事件，插件可以监听这些事件的发生，在特定时机做对应的事情。

## 流程概括

Webpack的运行流程是一个串行过程，从启动到结束会依次执行以下流程：

1. 初始化参数：从配置文件和Shell语句中读取与合并参数，得出最终的参数；
2. 开始编译：用上一步得到的参数初始化Compiler对象，加载所有配置的插件，执行对象的run方法开始执行编译；
3. 确定入口：根据配置中的entry找出所有的入口文件；
4. 编译模块：从入口文件出发，调用所得配置的loader对模块进行翻译，再找出模块依赖的模块，再递归本步骤直到所有的入口依赖的文件都经过了本步骤处理；
5. 完成模块编译：在经过
