当前位置: 首页 > news >正文

Vue3打包自动生成版本JSON文件,添加系统版本检查,实现系统自动更新提示

实现该功能一共有三步。废话不多说,直接上代码!!!

第一步:打包时自动生成版本信息的js文件,versionUpdate.js

import fs from 'fs';
import path from 'path';
import { ElMessageBox } from 'element-plus';
import axios from 'axios';const SYSTEM_VERSION_KEY = 'version';/*** 生成版本信息文件* @param isCreateVersionFile - 是否创建版本信息文件,默认为false*/
export default function (options) {const { isCreateVersionFile = false } = options;if (!isCreateVersionFile) return false;// 生成版本信息文件内容const versionJson = {// 使用编译时间作为版本号: 时间格式 + 时间戳[SYSTEM_VERSION_KEY]: `${new Date().toLocaleString()} - ${new Date().getTime()}`,};let config = {publicDir: '',};return {name: 'version-update',configResolved(resolvedConfig) {// 获取最终解析的配置config = resolvedConfig;},buildStart() {// 生成版本信息文件路径const file = config.publicDir + path.sep + 'version.json';const content = JSON.stringify(versionJson);// 写入文件function writeVersion(versionFileName, content) {fs.writeFile(versionFileName, content, err => {if (err) throw err;});}if (fs.existsSync(config.publicDir)) {writeVersion(file, content);} else {fs.mkdir(config.publicDir, err => {if (err) throw err;writeVersion(file, content);});}},};
}/*** 版本检查* @return {Promise<boolean>}  返回false表示需要不更新版本*/
export const versionCheck = async (isCheck = true) => {try {if (!isCheck) return false;const { hostname, origin } = window.location;// 如果是本地开发环境,则不进行版本检查if (['localhost', '127.0.0.1'].includes(hostname)) return false;// 实时获取在线版本信息const res = await axios.get(`${origin}/version.json?t=${new Date().getTime()}`);if (res?.status !== 200) return false;// 获取版本信息文件const { version } = res?.data;// 获取本地版本号const localVersion = localStorage.getItem(SYSTEM_VERSION_KEY);// 判断本地版本号与当前版本号如果一致,则不提示更新if (localVersion === version) return false;ElMessageBox.confirm(`检测到新版本,是否现在更新?`, '版本更新提示', {confirmButtonText: '更新',type: 'warning',showCancelButton: false,draggable: true,closeOnClickModal: false,closeOnPressEscape: false,}).then(() => {// 把最新版本号存储在本地localStorage.setItem(SYSTEM_VERSION_KEY, version);window.location.reload();});} catch (error) {console.error('versionCheck--error--', error);}
};

第二步: 把该versionUpdate.js文件配置到vite的plugins中

import { defineConfig } from 'vite';
import viteCompression from 'vite-plugin-compression';
import { visualizer } from 'rollup-plugin-visualizer';
import ViteRestart from 'vite-plugin-restart';
import versionUpdate from './src/utils/versionUpdate';export default ({ mode, command }) => {return defineConfig({plugins: [// 版本更新versionUpdate({isCreateVersionFile: command === 'build',}),// 文件压缩viteCompression({verbose: true, // 是否在控制台中输出压缩结果disable: false,threshold: 10240,algorithm: 'gzip',ext: '.gz',}),visualizer({ open: true }),ViteRestart({restart: ['vite.config.js', 'package.json'],}),],esbuild: {drop: ['debugger'],},});
};

第三步: 将版本检查配置在router.beforeEach中或者你需要的地方

import { versionCheck } from '@/utils/versionUpdate';router.beforeEach(async (to, from, next) => {// 检查版本await versionCheck();...})

http://www.lryc.cn/news/485609.html

相关文章:

  • 海量数据有限内存系列问题解决方案
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,
  • 内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理
  • 麒麟nginx配置
  • 如何在 Ubuntu 上安装 Emby 媒体服务器
  • Mac上详细配置java开发环境和软件(更新中)
  • jmeter常用配置元件介绍总结之定时器
  • Spring——提前编译
  • 乐理的学习(音程)
  • 【网络】数据链路层协议——以太网,ARP协议
  • Linux分区、挂载、配额、逻辑卷、RAID、系统综合状态查看
  • 3D Gaussian Splatting 代码层理解之Part1
  • Qt小知识-Q_GLOBAL_STATIC
  • 【SpringBoot】使用过滤器进行XSS防御
  • 创建vue插件,发布npm
  • 【Android Compose原创组件】可拖动滚动条的完美实现
  • 【模块一】kubernetes容器编排进阶实战之资源管理核心概念
  • 用Python设置PowerPoint幻灯片背景
  • Restful API接⼝简介及为什么要进⾏接⼝压测
  • [pyspark] pyspark中如何修改列名字
  • 掌握 Spring Boot 的最佳方法 – 学习路线图
  • element-ui】使用el_upload上传文件无法动态修改action
  • 如何查看电脑支持的最大内存
  • 24 年第十届数维杯国际数模竞赛赛题浅析
  • Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新
  • 排序算法 -计数排序
  • Java学习,基本数据类型
  • 单片机GPIO中断+定时器 软件串口通信
  • elementui el-table中给表头 el-table-column 加一个鼠标移入提示说明
  • NVR小程序接入平台/设备EasyNVR多个NVR同时管理设备接入:海康NVR 3.0提示不在线如何处理?