初始化阶段 
- 初始化参数 从配置文件、 配置对象、Shell 参数中读取,与默认配置结合得出最终的参数
 - 创建编译器对象 用上一步得到的参数创建 
Compiler对象 - 初始化编译环境 包括注入内置插件、注册各种模块工厂、初始化 RuleSet 集合、加载配置的插件等
 - 开始编译 执行 
compiler对象的run方法 - 确定入口 根据配置中的 
entry找出所有的入口文件,调用compilition.addEntry将入口文件转换为dependence对象 
构建阶段 
- 编译模块(make) 根据 
entry对应的dependence创建module对象,调用loader将模块转译为标准 JS 内容,调用 JS 解释器将内容转换为 AST 对象,从中找出该模块依赖的模块,再 递归 本步骤直到所有入口依赖的文件都经过了本步骤的处理 - 完成模块编译 上一步递归处理所有能触达到的模块后,得到了每个模块被翻译后的内容以及它们之间的 依赖关系图
 
生成阶段 
- 输出资源(seal) 根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 
Chunk,再把每个Chunk转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会 - 写入文件系统(emitAssets) 在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统