Skip to content
On this page

hash vs chunhash vs contenthash

hash

hash 是根据所有文件的内容计算出的🈯值,因此,无论有多少的chunk,其 hash 值都是一样的

chunkhash

chunkhash 是基于 entry 计算的,每一个 chunk,会生成不同的hash值。

module.exports = {
  mode: "development",
  entry: {
    index: './index.js',
    main: './main.js'
  },
  output: {
    filename: '[name].[chunkhash].js'
  },
};
1
2
3
4
5
6
7
8
9
10

当前webpack配置,存在两个打包入口:index.jsmain.js

这两个入口的文件引用关系如下:

index.js -> index-1.js

main.js -> main-1.js

第一次打包

文件chunkhash
maineb47078030e568214c45
index6d6ce1dd00c6d488a9de

第二次打包

仅修改 index-1.js 文件

文件chunkhash
maineb47078030e568214c45
index
a09cd21a892a640a7d8f

对比发现,仅有 index.js 文件的 chunkhash 发生了变化。因为仅是 index.js 入口的文件依赖发生了变化,main.js 入口文件并没有发生变化。

contenthash

contenthash 是指根据文件内容计算hash值

即便是文件名不同,但文件内容相同,那么 contenthash 也是相同的

webpack5 中增加了 realContentHash feature,修复了 contenthash 的错误,具体可以见下面文章:

https://www.matthinchliffe.dev/2023/12/20/content-hashes-fixed-in-webpack-v5