美文网首页
Vue 项目每次发版后要清理浏览器缓存 问题

Vue 项目每次发版后要清理浏览器缓存 问题

作者: IssunRadiance | 来源:发表于2023-07-04 10:31 被阅读0次
打包的时候给每个打包文件后面加一个时间戳,通过vue.config.js配置
const path = require('path')
const webpack = require('webpack')
const timeStamp = new Date().getTime()
module.exports = {
  publicPath: './',
  // 打包的时候不使用hash值.因为我们有时间戳来确定项目的唯一性了.
  filenameHashing: false,
 
  // 将构建好的文件输出到哪里
  outputDir: 'dist',
  
  configureWebpack: { // 重点
    // 输出重构 打包编译后的js文件名称,添加时间戳.
    output: {
      filename: `js/[name].${timeStamp}.js`,
      chunkFilename: `js/chunk.[id].${timeStamp}.js`,
    }
  },
 
  css: { //重点.
    extract: { // 打包后css文件名称添加时间戳
      filename: `css/[name].${timeStamp}.css`,
      chunkFilename: `css/chunk.[id].${timeStamp}.css`,
    }
  }
}
  • 这样可以解决问题,每次打包发布之后, 项目不需要强制清理缓存就可以试试更新内容了。
  • 但是这时候又有一个新问题产生。
  • 就是这样打包完发布之后, 因为每次的文件名不一样,项目中偶尔会报错ChunkLoadError: Loading chunk failed。原因就是浏览器取的是缓存中的文件名称,新打包之后,文件名称改变,导致浏览器找不到文件了404。需要刷新页面,重新加载文件。
先说一下单独解决这个问题的方法
// 在main.js中
/* 路由异常错误处理,尝试解析一个异步组件时发生错误,重新渲染目标页面 */
router.onError((error) => {
  const pattern = /Loading chunk (\d)+ failed/g;
  const isChunkLoadFailed = error.message.match(pattern);
  const targetPath = router.history.pending.fullPath;
  if (isChunkLoadFailed) {
    // 用路由的replace方法,
    // 并没有相当于F5刷新页面,
    // 失败的js文件并没有从新请求,
    // 会导致一直尝试replace页面导致死循环,
    // 而用 location.reload 方法,相当于触发F5刷新页面,
    // 虽然用户体验上来说会有刷新加载察觉,但不会导致页面卡死及死循环,
    // 从而曲线救国解决该问题
    window.location.reload();
    // router.replace(targetPath);
  } else {
    console.log('no')
  }
});
  • 当捕获到Loading chunk {n} failed的错误时我们重新渲染目标页面,这种实现明显更简单和友好。
结合我们上面的问题,想到了一个新的解决方式,在打包的时候,文件名称不变,使用版本号。这样也可以实现每次打包发布后不需要强制清理缓存,又不会出现找不到文件的情况
  • 在vue.config.js中,将name.timeStamp.js 改成 name.js?v=timeStamp
configureWebpack: {
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    output: {
      filename: `js/[name].js?v=${timeStamp}`,
      chunkFilename: `js/chunk.[id].js?v=${timeStamp}`,
    }
  },
  css: { 
    extract: { 
      filename: `css/[name].css?v=${timeStamp}`,
      chunkFilename: `css/chunk.[id].css?v=${timeStamp}`,
    }
  },

这样就可以啦!!!

相关文章

  • 解决index.html缓存问题

    解决index.html缓存问题 一般项目发版后前端静态文件会有缓存问题, 不强制刷新很难解决, 但是用户不会去强...

  • 前端静态资源版本更新利用gulp自动化添加版本号

    项目每次发布后,会有缓存问题,导致页面不更新,尤其是微信浏览器,缓存情况更为严重。然后利用gulp 给js,css...

  • 2021-12-08 http常用缓存策略及vue-cli单页面

    问题描述 vue 项目打包上线之后,每一次都会有浏览器缓存问题,需要手动的清除缓存。这样用户体验非常不好,所以我们...

  • vue构建的H5项目文件缓存引发部分机型白屏问题

    vue项目打包后,在非首次线上更新项目时,某些老用户浏览器/微信浏览器在项目更新后首次打开页面,由于用户缓存了之前...

  • 80.http header

    最近在项目中遇到了一个vue项目发版之后用户需要手动刷新浏览器才能重新访问系统的问题,不刷新的话,用户行为表现为:...

  • vue的版本控制,部署后自动更新啥的!

    有没有碰到项目改完部署后,打开还是之前的,必须清空浏览器缓存vue的版本控制就完美的解决了这个问题,小技巧从我欢欢...

  • 8.12我的成长

    一、工作 1.上午修改了项目白页问题。 2.了解了浏览器缓存机制,学习到每次对静态文件做修改后,如何让浏览器从服务...

  • Vue 部署上线清除浏览器缓存

    vue 项目打包上线之后,每一次都会有浏览器缓存问题,需要手动的清除缓存。这样用户体验非常不好,所以我们在打包部署...

  • Web开发小技巧

    1、调试包括清理缓存(所有时间,所有缓存)。 2、调试包括重运行项目 3、调试包括重启浏览器,编译器。

  • Cookie for Mac(浏览器缓存清理工具)

    Cookie Mac版是Macos平台上的一款浏览器缓存清理工具,所有的浏览器Cookie,本地存储数据,HTML...

网友评论

      本文标题:Vue 项目每次发版后要清理浏览器缓存 问题

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