issues
search
kevinxft
/
Notebook
个人笔记本
0
stars
0
forks
source link
webpack笔记
#21
Open
kevinxft
opened
2 years ago
kevinxft
commented
2 years ago
涉及的东西
babel
kevinxft
commented
2 years ago
核心流程
初始化阶段
初始化参数:从配置文件、 配置对象、Shell 参数中读取,与默认配置结合得出最终的参数;
创建编译器对象:用上一步得到的参数创建 Compiler 对象;
初始化编译环境:包括注入内置插件、注册各种模块工厂、初始化 RuleSet 集合、加载配置的插件等;
开始编译:执行 compiler 对象的 run 方法,创建 Complition 对象;
确定入口:根据配置中的 entry 找出所有的入口文件,调用 compilition.addEntry 将入口文件转换为 dependence 对象。
构建阶段
编译模块(make):从 entry 文件开始,调用 loader 将模块转译为标准 JS 内容,调用 JS 解析器将内容转换为 AST 对象,从中找出该模块依赖的模块,再 递归 处理这些依赖模块,直到所有入口依赖的文件都经过了本步骤的处理;
完成模块编译:上一步递归处理所有能触达到的模块后,得到了每个模块被翻译后的内容以及它们之间的依赖关系图。
生成阶段
合并(seal):根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk;
优化(optimization):对上述 Chunk 施加一系列优化操作,包括:tree-shaking、terser、scope-hoisting、压缩、Code Split 等;
写入文件系统(emitAssets):在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。
涉及的东西