webpack 概念速查
发表于更新于阅读时长 1 分钟我为什么会懂这个
主流程和概念
- 初始化,解析选项,和默认选项合并,创建编译器,得到
compiler
- 调用
compiler.compile
,得到compilation
,记录某次编译相关的信息,如module
,dependence
等 - 开始构建(make)
- 把
entry
文件加入dependence
中 - 根据
dependence
调用不同的moduleFactory
构建module
- 使用 loader-runner 把各种资源转化为 JavaScript
- 使用 acron parse 转化之后的 JS,遍历 AST,如果遇到依赖,就将其加入
dependence
- 重复 234,直到所有的
dependence
都被处理
- 把
- 输出文件(optimization,seal 和 emitAsset)
- 遍历
compilation.module
,一个entry
引入的所有静态module
分进一个chunk
,一个动态引入的module
及其依赖分进一个chunk
- 确定
chunk
之间的父子关系,如果父chunk
提供了module
,则移除当前chunk
里的 - concatenate moudle,在 rollup 里叫 scope hoisting。对于是 ESM 且所有依赖者在同一个 chunk 内的 module,将其与父
module
合并,会显示成 xxx.js + 1 modules - 将
module
改写成 IIFE,重写所有的import
和export
- 根据特定规则从
chunk
生成asset
,进行输出
- 遍历
RuntimeGlobals
hook
- 如果不关心子 compliation,用 thisCompilation 而不是 compilation