Vite+Vue3实现版本更新检查,实现页面自动刷新

news2024/11/26 21:24:03

Vite+Vue3实现版本更新检查,实现页面自动刷新

      • 1、使用Vite插件打包自动生成版本信息
      • 2、Vite.config.ts配置
      • 3、配置环境变量
      • 4、路由配置

现有一个需求就是实现管理系统的版本发版,网页实现自动刷新页面获取最新版本
搜索了一下,轮询的方案有点浪费资源,不太适合我的

现在使用了路由跳转的方式去实现 这里有个大佬

就是在每次打包的时候生成一个version.json版本信息文件,在页面跳转的时候请求服务端的version.json的版本号和浏览器本地的版本号对比,进行监控版本的迭代更新,并对页面进行更新

1、使用Vite插件打包自动生成版本信息

Vite插件即是Vite虚拟模块, Vite 沿用 Rollup 的虚拟模块官网有解释(第一次了解到Vite虚拟模块)

这里的文件位置为  /src/utils/versionUpdatePlugin.ts
//简易Ts版
// versionUpdatePlugin.js
import fs from 'fs';
import path from 'path';
interface OptionVersion {
	version: number | string;
}
interface configObj extends Object {
	publicDir: string;
}

const writeVersion = (versionFileName: string, content: string | NodeJS.ArrayBufferView) => {
	// 写入文件
	fs.writeFile(versionFileName, content, (err) => {
		if (err) throw err;
	});
};

export default (options: OptionVersion) => {
	let config: configObj = { publicDir: '' };

	return {
		name: 'version-update',

		configResolved(resolvedConfig: configObj) {
			// 存储最终解析的配置
			config = resolvedConfig;
		},

		buildStart() {
			// 生成版本信息文件路径
			const file = config.publicDir + path.sep + 'version.json';

			// 这里使用编译时间作为版本信息
			const content = JSON.stringify({ version: options.version });

			if (fs.existsSync(config.publicDir)) {
				writeVersion(file, content);
			} else {
				fs.mkdir(config.publicDir, (err) => {
					if (err) throw err;
					writeVersion(file, content);
				});
			}
		},
	};
};

2、Vite.config.ts配置

define全局变量配置,不懂可以看看这个

import versionUpdatePlugin from './src/utils/versionUpdatePlugin'; //Rollup 的虚拟模块

// 打包时获取版本信息
const CurrentTimeVersion = new Date().getTime();
const viteConfig =  defineConfig((config) => {
	const now = new Date().getTime()
	return {
	  ...
	  define: {
		// 定义全局变量
		'process.env.VITE__APP_VERSION__': CurrentTimeVersion,
	  },
	  plugins: [
		...
		versionUpdatePlugin({
			version: CurrentTimeVersion,
		}),
	  ],
	  ...
	}
  })

3、配置环境变量

环境变量分开了,没有直接放在 .env中

在这里插入图片描述

//development 和 production
# 版本
VITE__APP_VERSION__ = ''

4、路由配置

路由跳转是自动检测版本,有新版本则自动更新页面

// 版本监控
const versionCheck = async () => {
//import.meta.env.MODE 获取的是开发还是生产版本的
	if (import.meta.env.MODE === 'development') return;
	const response = await axios.get('version.json');
	// eslint-disable-next-line no-undef
	//process.env.VITE__APP_VERSION__  获取环境变量设置的值,判断是否与生成的版本信息一致
	if (process.env.VITE__APP_VERSION__ !== response.data.version) {
		// eslint-disable-next-line no-undef
		ElMessage({
			message: '发现新内容,自动更新中...',
			type: 'success',
			showClose: true,
			duration: 1500,
			onClose: () => {
				window.location.reload();
			},
		});
	}
};
// 这里在路由全局前置守卫中检查版本
router.beforeEach(async () => {
  await versionCheck()
})

继续多学习…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql:避免重复的插入数据方法汇总

最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我介绍4种方法: …

【Windows10】电脑副屏无法调节屏幕亮度?解决方法

先说下情况,本人对显示器不太懂,属于小白 这个副屏无法调节的问题出现也已经很久了,但是之前亮度适合就无所谓,今天突然按了之后很亮,于是就找问题。 第一步,我直接百度,遇事不决,百…

59 双向循环神经网络【动手学深度学习v2】

59 双向循环神经网络【动手学深度学习v2】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV12X4y1c71W/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 核心思想:取决于过去和未来的上下文,来预测当前的…

Apache Spark 命令注入(CVE-2022-33891)

利用范围 Spark Core - Apache <3.0.3 3.1.1 < Spark Core - Apache <3.1.2 3.2.0 < Spark Core - Apache <3.2.1 环境搭建 修改bin目录下的spark-shell 修改如下&#xff0c;添加调试端口 变动如上 然后启动 ./spark-shell --conf spark.acls.enabletrue即…

使用百度地图官方WEB API,提示 “ APP 服务被禁用“ 问题的解决方法

问题描述 项目上用了百度地图官方WEB API&#xff0c;打开界面时百度地图无法打开&#xff0c;出现弹窗&#xff1a; APP被您禁用啦。详情查看&#xff1a;http://lbsyun.baidu.com/apiconsole/key#。 原因分析&#xff1a; 查看错误信息&#xff1a;"status":240,…

Word文档带有权限密码怎么办?

Word文档的权限密码指的是什么&#xff1f;其实这是Word文档的保护方法之一&#xff0c;具体指Word文档的编辑、修改受到了限制&#xff0c;需要输入密码才能进行。 设置了权限密码的Word文档还是可以直接打开&#xff0c;只有当需要编辑或者修改内容的时候&#xff0c;才会发…

CSDN版的详细MarkDown的使用教程

MarkDown的使用欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释…

雅思经验(7)

我发现雅思阅读要命的不是难度&#xff0c;而是时间的把控。考试时间是总共一小时&#xff0c;但是要写三篇文章&#xff0c;之后总共40道题目&#xff0c;也就是说每篇文章平均是13.3道。但是他们很多人说&#xff0c;如果誊写答案需要花掉3、4分钟每篇&#xff0c;也就是说真…

学习IB课程的宝藏网站,有需求选择

很多学习IB课程的同学都会觉得IB课程很难&#xff0c;平时作业很多根本没时间找资料&#xff0c;其实不用担心&#xff0c;关于IB课程学习的网站&#xff0c;小编已经帮大家整理好了&#xff0c;建议收藏起来&#xff01; 数学类IB网站&#xff1a;Revision Villag 数学对于会的…

Bard AI:训练过程中使用了多少数据?

近年来&#xff0c;人工智能取得了长足的进步&#xff0c;并在科技界掀起了波澜。 随着谷歌最近推出新的人工智能聊天机器人 Bard&#xff0c;人们对这项技术的工作原理以及训练它的内容感到好奇。 人工智能技术的关键组成部分之一是训练过程中使用的数据量&#xff0c;这有助于…

聊聊数据仓库是什么

随着数据通过各种方式创造了巨大价值&#xff0c;各领域的企业开始不断挖掘数据的作用&#xff0c;数据的重要性得到了社会各界的共同认可。像我们熟知的数据治理、数据管理、数据标准以及数据资产都是因为数据地位不断提升&#xff0c;企业开始重视起数据全生命周期流程&#…

整数规划、对偶理论、线性规划经典例题讲解

整数规划是一类要求问题的解中的全部或一部分变量为整数的数学规划&#xff0c;应用范围极其广泛。不仅在工业和工程设计和科学研究方面有许多应用&#xff0c;而且在计算机设计、系统可靠性和经济分析等方面也有新的应用。通过前面的学习&#xff0c;我们已经掌握了整数规划的…

Java测试——selenium具体操作

selenium的前置准备工作可以参考我之前的博客&#xff1a;Java测试——selenium的安装与使用教程 这篇博客讲解一下selenium的常见操作 先创建driver ChromeDriver driver new ChromeDriver();输入网址 driver.get("https://www.baidu.com");常见操作 查找元素…

[数据分析] 数据指标体系搭建

在数据分析的学习过程中&#xff0c;我们通常会要求掌握以下两点: 1.理解数据&#xff0c;懂得从数据中发现业务指标(学会如何去看懂数据) 2.使用相关指标去分析数据&#xff0c;同时使用多个指标去分析一个问题(了解常见的指标) 当我们拿到数据(通常以Excel或者数据库方式去…

机器学习评估指标的十个常见面试问题

评估指标是用于评估机器学习模型性能的定量指标。它们提供了一种系统和客观的方法来比较不同的模型并衡量它们在解决特定问题方面的成功程度。通过比较不同模型的结果并评估其性能可以对使用哪些模型、如何改进现有模型以及如何优化给定任务的性能做出正确的决定&#xff0c;所…

java世界String的那些事

String的创建机理&#xff1a; 由于String在Java世界中使用过于频繁&#xff0c;Java为了避免在一个系统中产生大量的String对象&#xff0c;引入了字符串常量池。其运行机制是&#xff1a;创建一个字符串时&#xff0c;首先检查池中是否有值相同的字符串对象&#xff0c;如果…

【Nacos】Nacos配置中心客户端配置更新源码分析

上文我们说了服务启动的时候从远程Nacos服务端拉取配置&#xff0c;这节我们来说下Nacos服务端配置的变动怎么实时通知到客户端&#xff0c;首先需要注册监听器。 注册监听器 NacosContextRefresher类会监听应用启动发布的ApplicationReadyEvent事件&#xff0c;然后进行配置…

现在00后也这么卷?部门刚来的00后软件测试工程师已经要把我卷崩溃了...

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;刚开年我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最…

sqlmap对http请求头扫描,爬取数据库数据

做安全测试时&#xff0c;先用appscan扫描目标网站&#xff0c;爆出sql盲注的风险 然后使用sqlmap专业工具来扫描分析漏洞 GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover toolAutomatic SQL injection and database takeover tool - GitHub …

Mysql 部署 MGR 集群

0. 参考文章 官方文档&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客&#xff1a; MGR 单主模式部署教程&#xff08;基于 MySQL 8.0.28&#xff09; - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…