Hello, Boswell!

webpack 模块打包器

  • 将每个依赖项按照自己的规则模块化,然后通过打包器来管理模块之间依赖;

webpack打包产物的运行机制

  1. 开始加载入口模块,为的是执行模块;
  • 加载时,创建新模块;
  • 新模块加入缓存中;

创建模块中:

  • 找缓存中的模块,有就返回,没有就下一步;
  • 新建模块;
  • 执行模块;
  1. 执行入口模块时,加载依赖模块;
  • 重复 1;

模块加载执行

  1. webpack 的产物维护了 js 模块加载的模块化库;
  2. webpack 的产物维护了 js 文件模块之间的依赖关系,然后逐个一次执行,在模块加载的时候;

打包基础

  • 模块
  • 捆绑

打包器的流程

  • 解析入口文件,获取所有的依赖项;

    • @babel/parser 解析入口文件,获取 ast;

      • 读取入口文件内容;
      • 使用@babel/parser(js 解析器)解析代码,生成 ast;
    • 获取入口文件内容;

    • 获取它所有的依赖模块;

      • 数组存放 ast 中解析出来的依赖;
      • 使用@babel/traverse,它和 babel 解析器配合使用,可以用来遍历及更新每个子节点;
  • 递归解析所有的依赖项,生成一个依赖关系图;

  • 使用依赖图返回一个可运行的 js 文件;

模块的依赖关系(依赖图/数据结构/图)

  1. 定义模块;

插件

  • 解决加载器不能解决的事情;

加载器

  • 应用于模块源代码的转换;
Last Updated:
Contributors: Boswell, Boswell, mingzhuang.ji