Skip to content
On this page

一、基本构建流程

1.1、初始化参数

从配置文件和 Shell 命令中读取和合并参数,得多最终的配置 config

1.2、开始编译

调用 webpack 函数接受 config 配置信息,并初始化 complier 对象, 加载配置的所有 plugin, 执行complier.run 方法进入模版编译阶段, 根据配置项 entry 确定入口文件

1.3、编译模块

每一次新的编译都会实例化一个 compilation 对象,记录本次编译的基本信息。编译从入口文件出发:

  • 调用合适的 loader 对模块进行处理,转换成标准的js模块

  • 调用第三方插件acorn对标准js模块进行分析,收集模块依赖项,同时会递归每个依赖项,收集依赖项的依赖信息,如此往复,最终会得到一个依赖树

1.4、完成编译模块

根据入口和模块的依赖关系,将多个模块组装成一个个 chunk, 再将每个 chunk 转化成一个单独的文件加入到输出列表( ps: 这步是修改输出文件内容的最后机会

1.5、输出完成

确定好输出内容后,按照配置确定输出的文件名和路径,把文件内容写入到文件系统中

TIP

在上述整个过程中,webpack 会在特定的时间广播特定的事件( hook钩子函数 ),插件在监听到感兴趣的事件后会执行回调函数,利用 webpack 提供的 api 修改最后的输出结果

二、核心概念

2.1、compiler

编译器对象,其实例包含了完整的 webpack 配置,且全局只有一个 compiler 实例,相当于 webpack 的骨架或神经中枢,通过该对象可访问 webpack 内部环境

2.2、compilation

compilation 对象代表了一次资源版本构建。当运行 webpack 开发环境中间件时,每当检测到一个文件变化,就会创建一个新的 compilation,从而生成一组新的编译资源