Vue项目部署后,无需手动清浏览器缓存,自动实现代码更新的方法。

vue 部署上线清除浏览器缓存 vue 部署上线清除浏览器缓存   本文借鉴https://blog.csdn.net/weixin_43299180/article/details/116271209   vue 项目打包上线之后,每一次都会有浏览器缓存问题,需要手动的清除缓存。这样用户体验非常不好,所以我们在打包部署的时候需要尽量避免浏览器的缓存。下面是我的解决方案: 一、修改根目录index.html 在 head 里面添加下面代码 <meta http-equiv="pragram" content="no-cache"&g 阅读详情
AI摘要

本文介绍了一种前端开发中解决代码更新后浏览器缓存问题的方法,通过在打包后的文件名中添加时间戳,并在用户操作项目时对比版本号,自动刷新缓存,降低了手动清理缓存的繁琐。核心是vue.config.js中的文件修改和自定义的isNewVersion函数应用在路由导航守卫中。

背景:

前端开发在开发过程应该会中经常碰到:修复代码bug后,打包上线,测试人员需要手动清理浏览器缓存才能看到最新的改动,比较繁琐,而且正式上线后也不可能每次代码部署后都要提醒用户去清除浏览器缓存。

实现思路:

缓存产生的主要原因是因为打包后的js文件采用默认的打包机制,只是文件增加hash值,在某种情况下会存在hash值不变导致的缓存。针对此原因入手,可以给打包后的文件增加最新标识的后缀,这里使用时间戳,此外,前端维护一个记录版本号的文件,在用户操作项目的过程中,进行新老版本号的比对,版本号更改时对浏览器缓存进行reload(这样就无需用户手动刷新浏览器缓存),即可保持项目获取最新代码。

核心代码:

项目目录public下新建version文件

vue.config.js文件中新增以下代码,每次打包时将当前时间戳写入version,并在js文件后增加时间戳。

//vue.config.js
const path = require('path')
const fs = require("fs");

// 文件路径
const filePath = path.join(__dirname, './public/version');
 
// 读取文件内容
fs.readFile(filePath, 'utf8', (err, data) => {
  if (err) {
    return;
  }
 
 let newData = String(new Date().getTime());
  // 写入新内容到文件
  fs.writeFile(filePath, newData, 'utf8', (writeErr) => {
    if (writeErr) {
      console.error(writeErr);
      return;
    }
    console.log('File has been modified!');
  });
});


module.exports = {
    // 省略基础配置
    ......,
    
    configureWebpack: config => {
        // 省略基础配置
        ......,
        
        output:{
	        filename:`static/js/[name].[contenthash].js?t=${new Date().getTime()}`,
		    chunkFilename:`static/js/[name].[contenthash].js?t=${new Date().getTime()}`
        }
    }

    
}

自定义isNewVersion方法,用于线上环境比较新老版本号 (老版本号存储在localStorage中,新版本号请求version文件获取)

// utils/systemUpdate.js

const isNewVersion = () => {
  if (window.location.host.indexOf("localhost") > -1) {
    // 如果是本地环境,无需对比
  } else {
    // 线上环境的version文件请求地址
    let url = "";
    url = `//${
	  window.location.host
    }/version?t=${new Date().getTime()}`;

    axios.get(url).then(res => {
      console.log(" ~ file: systemUpdate.js:6 ~ axios.get ~ res", res);
      if (res.status == 200) {
        // 获取version文件最新版本号
        let vueVersion = res.data;

        // 浏览器缓存中获取之前的版本号
        let localVueVersion = window.localStorage.getItem("appVersion");

        if (localVueVersion && localVueVersion != vueVersion) {
          // 版本号不一致,存储新版本号,并刷新浏览器缓存
          window.localStorage.setItem("appVersion", vueVersion);
          window.location.reload();
          return;
        } else {
          window.localStorage.setItem("appVersion", vueVersion);
        }
      }
    });
  }
};

export default {
  isNewVersion
};

在全局路由导航守卫中使用上述方法,这样可以在用户每次切换路由时对比版本号,判断是否需要刷新缓存(如果不想触发过于频繁,可以采取别的方式,比如使用定时任务等)。

// src/router/index.js (有些项目全局路由导航守卫会放在其他文件)

import { isNewVersion }  from '@/utils/systemUpdate'

const router = [
    // 路由配置
    ...
]

// 路由导航守卫
router.beforeEach((to, from, next) => {
    
    isNewVersion()
    
    .......
    
}

vue打包后浏览器缓存问题及解决方案 阅读详情

相关推荐

vue3+vite纯前端实现自动触发浏览器刷新更新版本内容,并在打包时生成版本号文件

在前端项目中,有时候为了实现自动触发浏览器刷新并更新版本内容,可以采取一系列巧妙的措施。我的项目中是需要在打包时候生成一个version.js文件,用当前打包时间作为版本的唯一标识,然后打包发版,从实现对版本更新的监控。因为项目使用vite打包的,vite又是基于rollup打包,rollup不像webpack有可以实现增量构建;而是每次打包,所有文件的hash都会更新,这样就会导致浏览器缓存的资源失效。

m0_74823963的博客 2310

Vue 项目配置自动更新,自动刷新页面

今天用户反馈使用页面的时候,有时候点击没反应,排查下来,是因为发布版本的时候,用户那边没有加载最新的文导致的,然后根据思路,做了这个自动更新的功能。

王龙鑫的博客 4655

Vue点击确定或保存以后刷新当前页面

Vue点击事件刷新当前页面 1:方法一 window.location.reload(); 注意:此种方法点击刷新页面以后,网页的当前页面会有短暂的留白效果 2:方法二 this.$router.go(0) 注意:此方法代码简洁,但还是有刷新页面以后短暂留白的效果 ...

weixin_41346436的博客 7085

vue 如何实现页面操作之后自动刷新

然后在其他接口调用完毕之后,执行下面语句,也就是你想在什么操作之后进行刷新重载页面,加上下面这行代码。近半年时间在接触vue写pc页面,文中内容即在实际的开发过程中遇到的实际问题。然后在具体的页面的export default中,新增下面一行设置。实际执行的是你这个页面上的 created() 创建页面的语句。需要在app.vue文件按照如下代码设置。

小球的博客 4353

深入了解AES_GCM算法

常见的对称加密算法,在解密过程中无法确认密钥是否正确的。这就意味着,密文可以用任何密钥执行解密运算,得到一组疑似密文;由于不知道密钥是否正确,故也不能确定解密出来的明文数据是否正确。因此,需要在对称加密算法上增加一层验证机制,常见思路为使用加密算法进行加密保证机密性,使用摘要算法计算MAC保证完整性和真实性,这就涉及到摘要计算和加密计算的前后顺序和参与计算的数据、密钥等,使用起来略微麻烦。

huaqianzkh的专栏 4194

二进制部署的K8s集群,如何对到期证书更新

一年前搭建的k8s集群,突然不能够正常访问,出现502错误,首先怀疑容器没起来,先对问题进行排查,排查响应的容器有没有正常启动,状态一切正常,访问容器地址也可以正常访问,于是访问node port地址,发现无法正常访问,确定问题出现在svc中。 由于其他的应用、系统也无法提供正常的服务,应该是k8s的问题,非单个应用的原因。查看服务状态,kubectl describe svc xxx,endp...

时光旅行者 3771

vue项目中编辑、新建、删除、查找或者其他的操作成功后如何让其页面自动刷新

vue项目中编辑、新建、删除、查找或者其他的操作成功后如何让其页面自动刷新

qq_66180056的博客 3641

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

Vue项目发布后浏览器缓存问题解决

Vue项目发布后浏览器缓存问题解决 场景:前端vue网站项目使用wepack打包后进行部署,但是用户浏览器访问网站时加载了缓存,导致没有及时更新。  清除 Vue 缓存主要涉及到浏览器缓存和 Vue 应用的缓存。 1、配置public/index.html; 2、可以通过刷新页面强制清除缓存; 3、通过更改文件名或添加版本号来避免缓存; 4、使用 Vue 的内置方法清除缓存; 5、通过配置 Webpack 来避免缓存; 6、配置nginx不缓存index.html。

muzidigbig的博客 9453

Mixly米思齐——超声波测距控制LED灯

为了更加地贴近中小学信息技术的课程,我们用米思齐做了一个实验——根据距离的远近开启警报灯(利用超声波测出距离)。 实验硬件准备 arduino uno R3 、USB 数据线、YFROBOT UNO I/O扩展板、YFROBOT超声波传感器模块、模块3P连接线x1、LED灯x1 硬件连接图如下: 在arduino uno R3 上再接一个LED灯,实物图如下: 在本次实验中,LE...

Janise_的博客 9978

从零构建AI智能体:基于opencode框架的Agent开发全流程指南

AI智能体(AI Agent)作为人工智能领域的重要发展方向,正从概念走向工程实践。其核心原理在于赋予AI自主规划、执行和迭代的能力,使其不再局限于简单的问答,而是能够理解复杂目标、分解任务、调用工具并完成闭环。这一技术价值在于将AI从“对话伙伴”升级为“执行伙伴”,极大地拓展了自动化边界,在智能客服、数据分析、自动化运维等场景展现出巨大潜力。本文聚焦于如何利用opencode这一热门开发框架,快速构建具备实际能力的智能体。通过拆解其核心组件如技能库、规划器与运行时,并结合具体实践案例,系统阐述了从环境搭建

weixin_29055699的博客 439

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

蓝胖子的博客 7490

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1898

VUE 项目更新部署时,浏览器页面缓存问题

VUE 文章目录前言一、为什么会这样?二、如何解决1.具体操作2.打包测试总结 前言 最近客户和我反应一个问题他们在服务器上更新包后,发现页面并没有更新,而且简单刷新浏览器页面也没有效果,必须要清理浏览器缓存,页面才会刷新。 提示:以下是本篇文章正文内容,下面案例可供参考 一、为什么会这样? 仔细看引用的js 发现更新前后 引用的JS路径是一样的,而js是从服务器上下载本地浏览器的,如果不刷新浏览器缓存。更新后引用JS,CSS,还有一些静态资源还都是浏览器缓存中 二、如何解决 既然引用地址没有变化,

weixin_46140240的博客 9230

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码)

本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。

weixin_27015733的博客 369

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 493

VUE项目更新后需要客户手动刷新浏览器问题

VUE项目更新后需要客户手动刷新浏览器问题

wen_rou11的博客 2376

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue项目部署,清理缓存方式(亲测有效)

文章目录前言一、根目录index.html二、配置vue.config.js1.直接上代码【使用时间戳】总结 前言 部署前端项目以后,你会发现一个问题(为什么必须刷新页面,页面才会更新到最新版本),其实就是因为服务器缓存的问题,接下来我就以我自己所用的方案来解决自动清除缓存的问题。 一、根目录index.html 在head标签中,加入下面的代码 <meta http-equiv="pragram" content="no-cache"> <meta http-equiv="cache

qq_36579455的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vue进阶(幺捌柒)浏览器缓存问题解决

vue 项目打包部署上线之后,每一次都会有浏览器缓存问题,导致系统用户访问上个迭代批次的旧资源(css/js资源),若当前迭代批次项目包中不存在旧资源,系统就是出现404错误信息,需要系统用户手动清除缓存才能解决以上问题,导致用户体验非常不好。浏览器缓存(Browser Caching)机制是为了节约网络资源提升页面渲染性能,浏览器在用户磁盘上会对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,进而提升页面性能。

IT全栈 华强工作室 8244

前端实现版本更新自动检测✅

本文详细介绍了在现代Web应用中,特别是在单页面应用(SPA)环境下,如何实现前端版本更新的自动检测和提示用户刷新的功能。通过这种机制,可以有效避免用户因使用旧版代码而遇到的问题,确保功能一致性、减少接口兼容性问题并提高应用的可靠性。

weixin_45511682的博客 2499

解决vue cli3.x打包更新版本,浏览器缓存问题

问题: 每次打包更新版本发到服务器上,导致偶尔会出现不能及时更新最新代码,浏览器存在缓存的问题。总不能让用户打开新的无痕窗口吧。 解决: 我们可以在打包的文件名中添加一个版本号以便浏览器能区分。 1.找到vue.config.js(vue cli3.x生成的项目默认没有这个文件,需要自己创建) 2.添加如下代码 // 时间戳保证不会版本重复 const Timestamp = new Date()...

qq_40544291的博客 5899

vue 服务器代码更新 浏览器页面不更新

因浏览器缓存原因导致vue 打包的文件 导致偶尔会出现不能即使更新最新代码。因此在打包的文件名中添加一个版本号以便浏览器能区分。 解决方法:找到webpack .prod.conf.js 1.定义版本变量: constVersion = new Date().getTime(); // 这里使用的是时间戳 来区分 ,也可以自己定义成别的如:1.1 vue 服务器代码更新 浏览器页面不更新

前端kk的博客 1万+

vue项目实现缓存的最佳方案

需求 在开发vue的项目中有遇到了这样一个需求:一个视频列表页面,展示视频名称和是否收藏,点击进去某一项观看,可以收藏或者取消收藏,返回的时候需要记住列表页面的页码等状态,同时这条视频的收藏状态也需要更新, 但是从其他页面进来视频列表页面的时候不缓存这个页面,也就是进入的时候是视频列表页面的第一页 一句话总结一下: pageAList->pageADetail->pageAList,...

sinat_39726996的博客 1万+

【vue】项目迭代部署后 自动清除浏览器缓存

前言: vue项目打包部署上线后,因浏览器缓存问题,导致用户访问的依旧是上个迭代批次的旧资源,需要用户手动清除缓存才能更新至最新版本,影响用户体验。

T_ianxin的博客 749
上一篇: vue + js 封装下载文件的方法(对不同浏览器作兼容)
Lxg-JJJJ
博客等级 码龄7年 960粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值