webpack中hash、chunkhash和contenthash的区别

hash

hash 和每次 build 有关,没有任何改变的情况下,每次编译出来的 hash 都是一样的,但当你改变了任何一点东西,它的hash 就会发生改变。简单的说就是你改了任何东西,hash 就会和上次不一样了。

chunkhash

chunkhash是根据具体每一个模块文件自己的的内容包括它的依赖计算所得的hash,所以某个文件的改动只会影响它本身的hash,不会影响其它文件。

contenthash

它的出现主要是为了解决,让css文件不受js文件的影响。比如foo.cssfoo.js引用了,所以它们共用相同的chunkhash值。但这样子是有问题的,如果foo.js修改了代码,css文件就算内容没有任何改变,由于是该模块的 hash 发生了改变,其css文件的hash也会随之改变。

这个时候我们就可以使用contenthash了,保证即使css文件所处的模块里有任何内容的改变,只要 css 文件内容不变,那么它的hash就不会发生变化。

contenthash 简单理解就是 moduleId.content 所生成的 hash