webpack的打包流程(面试准备)

60 阅读2分钟

先想到一个问题,在大语言模型时代,打包流程还重要吗,这个在多大程度上可以得到解决?

替换import/require

ESM Common

先来了解一下webpack的构建流程:

1.找到配置文件webpack.config.js, 读取里面的配置和控制台命令里的配置,合并配置,根据配置得到参数,用参数初始化compiler, 这个compiler是webpack的核心引擎;compiler负责整个构建生命周期,包含了所有的构建逻辑和状态管理;

  1. 注册插件,遍历配置中的所有插件,调用每个插件的apply方法,将插件注册到compiler实例上;

3.1. 从入口文件entry开始,webpack会递归的解析每个模块的依赖。 3.2. 对于每个找到的模块,读取模块内容,找到对应loader,解析模块中的依赖声明。构建模块依赖关系图; 3.3.模块编译:将每个模块转换为 webpack 可以理解的格式:

  • 使用 AST(抽象语法树)分析代码结构

  • 替换依赖声明为 webpack 的模块加载机制

  • 生成模块的唯一标识符

4. 优化阶段 (Optimization)

4.1 代码分割

根据配置将模块分组为不同的 chunk:

  • 入口 chunk:包含入口文件及其依赖
  • 异步 chunk:通过动态导入创建的代码块
  • 公共 chunk:多个入口共享的模块

4.2 Tree Shaking

分析模块的导入导出,移除未使用的代码:

  • 标记所有被使用的导出
  • 删除未被引用的导出
  • 配合 UglifyJS 等工具删除死代码

4.3 模块合并与去重

  • 合并相同的模块
  • 删除重复的依赖
  • 优化模块加载顺序

4.4 代码压缩与混淆

在生产环境下:

  • 压缩 JavaScript 代码
  • 混淆变量名
  • 删除注释和空白字符

5. 生成阶段 (Generation)

chunk生成; 模块封装; 运行时代码生成;

6. 输出阶段 (Output)

6.1 文件生成