hash => chunkhash => contenthash
从前往后,效率越来越低,但是精度越来越高
存在即合理,三种方式主要是看是注重效率,还是注重精度,一般选择 chunkhash
hash
hash 是 webpack 单次打包生成的唯一值,所有文件共用一个 hash,当打包之后没有更改文件的前提下,再次进行打包,不会生成新的 hash
hash 使用的局限性
比如一个 chunk 改变,但是其他 chunk 的 hash 值会一起改变导致缓存失效
chunkhash
chunk 是什么?
入口模块以及它所依赖的模块组成的代码块,称为 chunk
chunkhash 指代入口模块以及它所依赖的模块组成的代码块所对应的 hash 值,此代码块所有模块共用一个 chunkhash,当有文件改动之后生成新的 chunkhash
contenthash
contenthash 即模块所对应的 hash
contenthash 可以避免使用 contenthash 的模块被其他模块改变而影响
比如场景:一条 chunk 上的 js 发生了改变,此时 css 不想缓存失效,那么 css 可以使用 contenthash
最好的方式是:chunkhash + contenthash
比如:
output: {filename: '[name].[chunkhash:8].js'},module: {rules: [{test: /\.css$/i,use: [MiniCssExtractPlugin.loader,'css-loader']}]},plugins: [new MiniCssExtractPlugin({filename: '[name].[contenthash:8].js'})]
