Vue项目重新部署后,提示用户刷新网页

2023-10-13 07:44

本文主要是介绍Vue项目重新部署后,提示用户刷新网页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vue项目部署后,如果用户没刷新页面,浏览器其实加载的还是旧的js文件,如何解决呢?

网上很多方案:
1:websocket监听,需要后台配置
2: 前端header传一个参数,和后台去匹配,类似登录超时功能,需要后台配置
3,前端生成json文件,存储版本号,通过接口调用这个json文件,不需要后台配合

我选择的是第三种。我是用的vite,和webpack差不多

直接上代码:

第一步:
新建一个update-version.js文件

const fs = require('fs');
const path = require('path');const versionNumber = new Date().getTime();const fileContents = {version: versionNumber.toString()
};
//build时,会自动在dist目录生成一个json文件
fs.writeFileSync(path.join(__dirname, 'dist', 'version.json'), JSON.stringify(fileContents));

第二步:
在package.json文件修改build命令
“scripts”: {
“dev”: “vite”,
“build”: “vite build && node update-version.js”
},

第三步:
在request.js文件,增加如下代码:

import axios from 'axios'
import md5 from 'md5'const service = axios.create({timeout: 10000
});
//刷新页面----------start--------------------
let isUpdatePromptShown = false; //多个请求时,只提示一次
service.interceptors.request.use(async request => {const response = await axios.get('/version.json');const acrmVersion = response.data.version;const currentVersion = localStorage.getItem('acrm-app-version')if(currentVersion === null){localStorage.setItem('acrm-app-version',acrmVersion)}else if(currentVersion !== acrmVersion && !isUpdatePromptShown){localStorage.setItem('acrm-app-version',acrmVersion)ElMessageBox.confirm('亲爱的用户,我们的系统有了新的更新,为了您能更好地使用,烦请您刷新一下页面哦!','系统提示',{confirmButtonText: '确定',type: 'warning',showClose: false,   //不显示关闭小图标showCancelButton: false,  // 不显示取消按钮closeOnClickModal: false, // 点击对话框周围不关闭对话框}).then(() => {location.reload()})isUpdatePromptShown = true;throw new axios.Cancel('需要刷新,阻止继续执行操作');}//刷新页面----------end--------------------request.headers["x-requested-with"] = "XMLHttpRequest";return request;
}, error => {return Promise.reject(error);
})

第四步:
本地想测试这个功能,直接在public新建一个version.json文件就行

这篇关于Vue项目重新部署后,提示用户刷新网页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201739

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于