一、Webpack 打包流程
webpack的编译都按照下面的钩子调用顺序执行
1、entry-option,初始化option
2、run,开始编译
3、make,从entry开始递归的分析依赖,对每个依赖模块进行build
4、before-resolve,对模块位置进行解析
5、build-module,开始构建某个模块
6、normal-module-loader,将loader加载完成的module进行编译,生成ast树
7、program,遍历AST,当遇到require等一些调用表达式时,收集依赖
8、seal,所有依赖build完成,开始优化
9、emit,输出到dist目录
二、WebpackOptionsApply
将所有的配置 options 参数转换成 webpack 内部插件使用默认插件列表举例:·output.library -> LibraryTemplatePlugin ·externals -> ExternalsPlugin ·
devtool -> EvalDevtoolModulePlugin, SourceMapDevToolPlugin ·AMDPlugin, CommonJsPlugin ·RemoveEmptyChunksPlugin
三、Compiler hooks流程相关:
·(before-)run
·(before-/after-)compile·
make·(after-)
emit
·done
监听相关:·watch-run·watch-close
四、CompilationCompiler
调用 Compilation 生命周期方法
·addEntry -> addModuleChain ·finish (上报模块错误) ·sea
五、ModuleFactory
normalmodulefactory
contextModuleFactory
六、module
1、normalmodule, 普通模块
2、contextmodule, ./src/a .src/b
3、externalmodule,module.exports=jquery
4、delegatedmodulemainfest
5、multiModuleentry:[‘a’,‘b’]