放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 前端

    • 前端 概览
    • 前端汇总

    • front 博文

    • front 项目总结

    • front 高级

    • front tools

      • 打包,构建工具
      • webpack

        • webpack
        • webpack知识点
        • webpack hash哈希值
          • webpack hash 哈希值
            • hash
            • chunkhash
            • contenthash
            • webpack hash 原理
        • webpack loader
        • webpack 插件
        • webpack热更新原理
        • webpack原理
        • webpack版本
      • vite
      • rollup
      • grunt
      • yeoman
      • babel
      • gulp
      • lerna
  • vue

    • vue 概览
    • vue 汇总

    • vue 博文

    • vue 项目总结

    • vue 高级

  • html

    • html 概览
    • html 汇总

    • html 博文

  • css

    • css 概览
    • css 汇总

    • css 博文

    • sass

    • less

  • js

    • javascript 概览
    • JS 汇总

    • ES6

    • JS 博文

    • JS 工具

  • node

    • node 概览
    • node 汇总

    • node 框架

    • node 博文

  • react

    • react 概览
    • react 汇总

    • react 博文

    • react 高级

  • 微信小程序

    • 微信小程序 概览
    • 微信小程序总结
    • 微信小程序文章
    • 微信小程序 博文

    • 微信小程序 高级

  • 微信公众号

    • 微信公众号 概览
    • 微信公众号总结
    • 微信公众号文章
  • 多端开发

    • 多端开发
    • dsbridge 概览
    • jsbridge 概览
    • webview
    • uniapp

      • uniapp 概览
    • taro

      • taro 概览
    • flutter

      • flutter 概览
      • flutter 环境搭建
    • electron

      • electron 概览
  • front
放肆青春
2021-12-10

webpack hash哈希值

# webpack hash 哈希值

在 webpack 中有三种 hash 可以配置,hash,chunkhash,contenthash

# hash

hash:每次构建会生成一个 hash。和整个项目有关,只要有项目文件更改,就会改变 hash

hash 会更据每次工程的内容进行计算,很容易造成不必要的 hash 变更,不利于版本管理。

# chunkhash

chunkhash:和 webpack 打包生成的 chunk 相关。每一个 entry,都会有不同的 hash。

# contenthash

contenthash:根据资源内容创建出唯一 hash,也就是说文件内容不变,hash 就不变。

# webpack hash 原理

webpack 的 hash 是通过 crypto 加密和哈希算法实现的,webpack 提供了 hashDigest(在生成 hash 时使用的编码方式,默认为 'hex')、hashDigestLength(散列摘要的前缀长度,默认为 20)、hashFunction(散列算法,默认为 'md5')、hashSalt(一个可选的加盐值)等参数来实现自定义

hash 和 chunkhash 的生成过程:

下面主要讲一下 hash 的生成过程,其中 chunkhash 的生成过程包含在其中。webpack 生成 hash 的第一步是获取 Compilation 下面的所有 modules,把所有的 module 在 build 阶段生成的_buildHash 作为内容生成一个新的 hash 值;然后获取到所有的代码块(chunks),分别把代码块(chunk)中包含的 module 的 hash 作为内容生成代码块(chunk)的 hash,该 hash 就是配置 chunkhash 时需要使用的 hash 值;最后把所有代码块(chunks)的 hash 作为内容生成一个 hash 就是最终的 hash

contenthash 生成过程:

contenthash 生成跟前两种 hash 生成不一样,它是通过 mini-css-extract-plugin 和 JavascriptModulesPlugin 插件生成的 hash;mini-css-extract-plugin 是 webpack 打包构建时把 css 类型的 module 单独分类出来的插件,使用该插件时会为 css 类型的文件单独生成 hash;它会把代码块(chunk)中所有类型为 css/mini-extract 的 module 的 hash 作为内容生成 chunkhash。

避免相同随机值:

webpack 在计算 hash 后分割 chunk。产生相同随机值可能是因为这些文件属于同一个 chunk,可以将某一个文件提到独立的 chunk,放入 entry


参考:从源码看 webpack 的 hash 策略 (opens new window)

更新时间: 1/7/2022, 9:57:25 AM
webpack知识点
webpack loader

← webpack知识点 webpack loader→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式