webpack 模块打包器
- 将每个依赖项按照自己的规则模块化,然后通过打包器来管理模块之间依赖;
webpack打包产物的运行机制
- 开始加载入口模块,为的是执行模块;
- 加载时,创建新模块;
- 新模块加入缓存中;
创建模块中:
- 找缓存中的模块,有就返回,没有就下一步;
- 新建模块;
- 执行模块;
- 执行入口模块时,加载依赖模块;
- 重复 1;
模块加载执行
- webpack 的产物维护了 js 模块加载的模块化库;
- webpack 的产物维护了 js 文件模块之间的依赖关系,然后逐个一次执行,在模块加载的时候;
打包基础
- 模块
- 捆绑
打包器的流程
解析入口文件,获取所有的依赖项;
@babel/parser 解析入口文件,获取 ast;
- 读取入口文件内容;
- 使用@babel/parser(js 解析器)解析代码,生成 ast;
获取入口文件内容;
获取它所有的依赖模块;
- 数组存放 ast 中解析出来的依赖;
- 使用@babel/traverse,它和 babel 解析器配合使用,可以用来遍历及更新每个子节点;
递归解析所有的依赖项,生成一个依赖关系图;
使用依赖图返回一个可运行的 js 文件;
模块的依赖关系(依赖图/数据结构/图)
- 定义模块;
插件
- 解决加载器不能解决的事情;
加载器
- 应用于模块源代码的转换;