当前位置: 首页 > article >正文

webpack-编译原理

webpack 编译过程

文章目录

  • webpack 编译过程
    • 初始化
    • 编译
      • 创建 chunk
      • 构建所有依赖模块
      • 产生 chunk assets
      • 合并 chunk assets
    • 输出
    • 总过程

webpack 的作用是将源代码编译(构建、打包)成最终代码。

在这里插入图片描述

整个过程大致分为三个步骤

  1. 初始化
  2. 编译
  3. 输出

在这里插入图片描述

初始化

此阶段,webpack 会将 CLI 参数配置文件默认配置进行融合,形成一个最终的配置对象。

对配置的处理过程是依托一个第三方库 yargs 完成的。

此阶段相对比较简单,主要是为接下来的编译阶段做必要的准备。

目前,可以简单的理解为,初始化阶段主要用于产生一个最终的配置。

编译

创建 chunk

chunk 是 webpack 在内部构建过程中的一个概念,译为,它表示通过某个入口找到的所有依赖的统称。

根据入口模块(默认为./src/index.js)创建一个 chunk。

在这里插入图片描述

每个 chunk 都有至少两个属性:

  • name:默认为 main。
  • id:唯一编号,开发环境和 name 相同,生产环境是一个数字,从 0 开始。

构建所有依赖模块

在这里插入图片描述

AST在线测试工具:https://astexplorer.net/

简图

在这里插入图片描述

产生 chunk assets

在第二步完成后,chunk 中会产生一个模块列表,列表中包含了模块 id 模块转换后的代码

接下来,webpack 会根据配置为 chunk 生成一个资源列表,即 chunk assets,资源列表可以理解为是生成到最终文件的文件名和文件内容。

在这里插入图片描述

chunk hash 是根据所有 chunk assets 的内容生成的一个 hash 字符串
hash:一种算法,具体有很多分类,特点是将一个任意长度的字符串转换为一个固定长度的字符串,而且可以保证原始内容不变,产生的 hash 字符串就不变

简图

在这里插入图片描述

合并 chunk assets

将多个 chunk 的 assets 合并到一起,并产生一个总的 hash

在这里插入图片描述

输出

此步骤非常简单,webpack 将利用 node 中的 fs 模块(文件处理模块),根据编译产生的总的 assets,生成相应的文件。

在这里插入图片描述

总过程

在这里插入图片描述

在这里插入图片描述

涉及术语

  • module

    模块,分割的代码单元,webpack 中的模块可以是任何内容的文件,不仅限于 JS。

  • chunk

    webpack 内部构建模块的块,一个 chunk 中包含多个模块,这些模块是从入口模块通过依赖分析得来的。

  • bundle

    chunk 构建好模块后会生成 chunk 的资源清单,清单中的每一项就是一个 bundle,可以认为 bundle 就是最终生成的文件。

  • hash

    最终的资源清单所有内容联合生成的 hash 值。

  • chunkhash

    chunk 生成的资源清单内容联合生成的 hash 值。

  • chunkname

    chunk 的名称,如果没有配置则使用 main。

  • id

    通常指 chunk 的唯一编号,如果在开发环境下构建,和 chunkname 相同;如果是生产环境下构建,则使用一个从 0 开始的数字进行编号。
    nk 的名称,如果没有配置则使用 main。

  • id

    通常指 chunk 的唯一编号,如果在开发环境下构建,和 chunkname 相同;如果是生产环境下构建,则使用一个从 0 开始的数字进行编号。


http://www.kler.cn/a/531611.html

相关文章:

  • 【hot100】刷题记录(12)-回文链表
  • 如何利用DeepSeek打造医疗领域专属AI助手?从微调到部署全流程解析
  • SQL优化
  • 【信息系统项目管理师-选择真题】2021上半年综合知识答案和详解
  • 在C#中,什么是多态如何实现
  • Ubuntu 下 nginx-1.24.0 源码分析 main函数 — ngx_cdecl 宏
  • 基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 一些单转多路电源芯片介绍及使用
  • 电脑开机键一闪一闪打不开
  • 热点账户优化和影子表压测
  • Mac电脑上好用的压缩软件
  • 普罗米修斯监控服务搭建位置全解析:权衡与抉择
  • 在客户现场可快速落地体验的智慧能源开源了。
  • Maven工程核心概念GAVP详解:从命名规范到项目协作的基石
  • 一文讲解HashMap线程安全相关问题(下)
  • Java—双列集合
  • 用FormLinker实现自动调整数据格式,批量导入微软表单
  • 使用VCS对Verilog/System Verilog进行单步调试的步骤
  • 在VS Code中基于TypeScript使用Vue.js搭建Babylon.js的开发环境
  • C# 接口介绍
  • 基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
  • 如何让DeepSeek恢复联网功能?解决(由于技术原因,联网搜索暂不可用)
  • 第 2 天:创建你的第一个 UE5 C++ 项目!
  • 鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache
  • 从一到无穷大 #43:Presto History Based Optimizer,基于PlanNode粒度统计的查询计划选择策略
  • 北京钟鼓楼:立春“鞭春牛”,钟鼓迎春来