Open huoxiangdong opened 6 years ago
module.exports = {
entry: '', // 入口文件
output: {}, // 出口文件
module: {}, //模块配置
plugins: [], // 对应的插件
devServer: {}, // 开发服务器配置
mode: 'development' // 模式配置
context: //工程路径
}
compiler.run
后首先会触发 compile
,这一步会构建出 Compilation
对象addEntry()
, _addModuleChain()
, buildModule()
,seal()
,createChunkAssets()
(在每一个节点都会触发 webpack
事件去调用各插件)module
,chunk
,生成的 asset
以及用来生成最后打包文件的 template 的信息webpack
的实际入口是 Compiler
中的 run
方法,run
一旦执行后,就开始了编译和构建流程 ,其中有几个比较关键的 webpack
事件节点。
compile
开始编译make
从入口点分析模块及其依赖的模块,创建这些模块对象build-module
构建模块after-compile
完成构建seal
封装构建结果emit
把各个chunk
输出到结果文件after-emit
完成输出loader
:能转换各类资源,并处理成对应模块的加载器。loader 间可以串行使用。chunk
:code splitting
(代码分割) 后的产物,也就是按需加载的分块,装载了不同的 moduleplugin
:webpack
的插件实体compilation.plugin(‘xxx’, callback)
: 事件绑定Compiler
中的 run
方法,run
一旦执行后,就开始了编译和构建流程compile
开始编译make
从入口点分析模块及其依赖的模块,创建这些模块对象build-module
构建模块after-compile
完成构建seal
封装构建结果emit
把各个chunk输出到结果文件after-emit
完成输出Compiler -> make
-> Compilation.addEntry -> options 对象的 entry 字段找到入口js文件
-> _addModuleChain
-> 一是根据模块的类型获取对应的模块工厂并创建模块
-> 二是构建模块
loader
处理模块之间的依赖require()
用对应的 loader
进行加工
,最后生成一个js module
acorn
解析经loader
处理后的源文件生成抽象语法树 ASTAST
,构建该模块所依赖的模块
PLUGIN
webpack
就是完成一个又一个任务而完成整个打包构建过程make
是最开始的起点,complie
就是编译任务点,after-complie
是编译完成,emit
是即将准备生成文件,after-emit
是生成文件之后等compilation
,它继承于compiler
,所以能拿到一切compiler的内容(所以你也会看到webpack
的options
),而且也有plugin
函数来接入任务点