webpack实现打包的hash值根据内容进行改变

2020-01-22  本文已影响0人  hahajj_2e72

hash

使用 hash 对js和css进行签名时,每一次hash值都不一样,导致无法利用缓存。

图片和字体图标的chunkhash问题

chunkhash重复

打包时发现,js和js引入的css的 chunkhash 是相同的,导致无法区分css和js的更新,如下

app_96ac1.css
app_96ac1.js

原因:因为webpack的编译理念,webpack将css视为js的一部分,所以在计算chunkhash时,会把所有的js代码和css代码混合在一起计算

解决:css是使用 ExtractTextPlugin 插件引入的,这时候可以使用到这个插件提供的 contenthash ,如下(使用后css就有独立于js外的指纹了),

//提取css文件
new ExtractTextPlugin({
     filename:'css/[name].[chunkhash:8].css'  //提取chunkhash8位码
})

注意在新版本中,我在webpack3中测试的是,修改css的内容并不会引起js中的 chunkhash 变动(原因估计是webpack内置的算法变为了只计算js chunk),所以css请务必使用 contenthash ,否则修改后无法生成新的签名,而是会覆盖以前的资源

contenthash
contenthash是针对文件内容级别的,只有你自己模块的内容变了,那么hash值才改变,所以我们可以通过contenthash解决上诉问题。

上一篇下一篇

猜你喜欢

热点阅读