美文网首页
webpack实现打包的hash值根据内容进行改变

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

作者: hahajj_2e72 | 来源:发表于2020-01-22 16:39 被阅读0次

hash

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

  • 原因:因为 hash 字段是根据每次编译compilation的内容计算所得,也可以理解为项目总体文件的hash值,而不是针对每个具体文件的。(所以每一次编译都会有一个新的hash,并不适用)。

  • 解决: 不用hash,而用 chunkhash (js和css要使用chunkhash), chunkhash 的话每一个js的模块对应的值是不同的(根据js里的不同内容进行生成)

图片和字体图标的chunkhash问题

  • 前面有提到,hash在js和css中不实用,所以在项目中所有的文件都准备用 chunkhash ,但是又有了新的问题-img和font等资源中,使用 chunkhash 会报错
  • 解决:因为 chunkhash 只适用于js和css,img中是没有这种东西的,仍然需要用到 hash (这个hash有点区别,每一个资源本身有自己的hash)

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解决上诉问题。

相关文章

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

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

  • 缓存

    webpack中可采用hash值打包阻止缓存策略

  • 面试准备第三篇

    1.实现isEqual和hash方法时要注意什么? |hash 对关键属性的hash值进行位或运算作为hash值 ...

  • web 前端性能优化

    一、webpack优化 js 代码分割,设置未变动代码文件的 hash 值不变将不在开发中不会变动的代码,单独打包...

  • vue项目打包文件增加hash值

    vue项目打包文件增加hash值 vue-cli2项目 修改vue项目根目录下的 build/webpack.p...

  • 处理index.html缓存问题

    前端使用webpack打包后 文件名是可以配置加入hash值,来保证每次打包后的文件名不一样,有效的应对部署新版...

  • Webpack中hash、chunkhash、contentha

    在webpack中有时需要使用hash来做静态资源实现增量更新方案之一,文件名的hash值可以有三种hash生成方...

  • 杂乱无章的 webpack 手记

    本文纯属个人笔记,毫无指导倾向和价值! 什么是webpack webpack 是模块打包器。根据模块的关系进行静态...

  • 初识webpack

    webpack初识 webpack是什么? 前端资源加载/打包工具。根据模块的依赖关系进行静态分析,将模块按照指定...

  • webpack:hash、chunkhash、contentha

    一、hash(所有文件哈希值相同,只要改变内容跟之前的不一致,所有哈希值都改变,没有做到缓存意义)hash是跟整个...

网友评论

      本文标题:webpack实现打包的hash值根据内容进行改变

      本文链接:https://www.haomeiwen.com/subject/ckxpzctx.html