首页 > 其他分享 >vue项目利用vite打包发版,前端页面自动提示用户刷新页面

vue项目利用vite打包发版,前端页面自动提示用户刷新页面

时间:2025-01-14 09:37:52浏览次数:1  
标签:vue const 版本号 js json version vite 页面

概要

        我们做一个纯前端自动提示用户刷新页面的功能,这个功能主要是防止用户的js代码还是旧版的导致某些功能没能及时更新。

整体架构流程

1、我们先在 public/version.json 创建这个json文件,用来存储版本号

{
  "version": "1.0"
}

2、我们可以在 vite.config.js 文件里面写这个自动写入文件更新版本号方法

// 打包文件时候 更新版本号 用作判断是否要刷新页面
function updateVersion() {
    return {
        name: 'update-version',
        buildStart() {
            let version = '';
            try {
                // 读取 json 文件里面版本号
                const packageJson = JSON.parse(fs.readFileSync('public/version.json', 'utf-8'));
                version = Number(packageJson.version);
                version = (version + 0.1).toFixed(1); // 增加0.1并保留1位小数
            } catch (error) {
                console.log(error);
            }
            const versionData = { version: version.toString() }; // 根据需要生成新版本号
            // 写入 json 文件里面版本号
            fs.writeFileSync('public/version.json', JSON.stringify(versionData, null, 2));
        },
    };
}

我们在 vite.config.js 文件里的defineConfig里面的plugin里面引入这个函数

tip:为什么要写成下面那样呢!如果我们在跑项目时候也会执行updateVersion()这个函数,我们版本号会变得很大,所以我们要在打包更新时候再执行updateVersion()这个函数才是我们需要的!

process.env.NODE_ENV === 'production' && updateVersion(),

 

3、我们可以在 utils/version.js 写一个公共方法判断 本地存储版本是否是最新版本的,而判断时间是在每次路由跳转之后执行

// utils/version.js
 
import axios from 'axios';
// 生成一个随机的字符串作为请求的查询参数
import { nanoid } from 'nanoid';
import {  MessageBox } from 'element-ui';
 
export async function isNewVersion() {
// 构建了一个 URL,用于请求版本信息的 JSON 文件。这个 URL 包括当前页面的主机名和一个随机生成的长度为 10 的字符串作为查询参数。
  const url = `//${window.location.host}/version.json?id=${nanoid(10)}`;
// 使用 Axios 发起了一个 get 请求,获取版本信息的 json 文件。
  try {
      const res = await axios.get(url);
      //   从响应数据中获取了版本号。
      const version = res.data.version;
      //   从本地存储中获取了之前保存的版本号
      const localVersion = localStorage.getItem('version');
      //   检查本地存储的版本号是否存在且与当前版本号不一致
      if (localVersion && localVersion !== version ) {
        MessageBox.confirm('发现新的版本,请刷新页面后使用!', '系统提示', {
                                confirmButtonText: '立即刷新',
                                // cancelButtonText: this.$t('btn.cancel'),
                                showCancelButton: false,
                                closeOnClickModal: false,
                                type: 'warning',
                            })
                                .then(() => {
                                    localStorage.setItem('version', version);
                                    window.location.reload();
                                })
                                .catch(() => {});
      } else {
        // 如果没有发现新版本,则仅将当前版本号保存到本地存储中。
        // 这段代码的作用是在页面加载时检查是否有新版本可用,如果有新版本则重新加载页面以获取最新版本
        localStorage.setItem('version', version);
      }
  } catch (error) {
        console.log(error);
  }
 
}

 

router.afterEach(() => {
    // 在路由切换时候进行判断版本号是否更新 提示用户刷新页面
    isNewVersion();
});

 

标签:vue,const,版本号,js,json,version,vite,页面
From: https://www.cnblogs.com/Fooo/p/18669892

相关文章

  • 获取访问页面数据
    获取访问页面数据调试工具接口应在服务器端调用,详细说明参见服务端API。本接口支持云调用。需开发者工具版本>=1.02.1904090(最新稳定版下载),wx-server-sdk>=0.4.0接口说明接口英文名getVisitPage功能描述该接口用于访问页面。目前只提供按page_visit_pv排序的t......
  • From表单提交时为什么会刷新页面?怎么预防刷新?
    From表单提交时会刷新页面,主要是因为表单提交是一种网络请求操作,当表单被提交时,浏览器会向服务器发送请求,服务器处理表单数据后返回一个新的页面,这个过程导致页面刷新,以展示服务器返回的新内容。要预防From表单提交时的页面刷新,可以采取以下几种方法:使用AJAX技术:AJAX(Asynchrono......
  • 《Vue.js设计与实现》学习笔记_第二章 框架吗设计的核心要素
    目录1.提升用户的开发体验2.控制框架代码的体积3.框架要做到良好的Tree-Shaking4.框架应该输出怎样的构建产物5.特性开关6.错误处理7.良好的TypeScript类型支持1.提升用户的开发体验提供友好的警告信息有助于开发者快速定位问题。提供必要的警告信息:warn函数......
  • Vue.js组件开发-实现图片裁剪
    在Vue.js中开发一个图片裁剪组件,可以使用cropperjs库,它是一个功能强大的JavaScript库,专门用于图片裁剪。在Vue项目中,可以通过vue-cropperjs这个Vue包装器来更方便地使用cropperjs。步骤:1.安装依赖首先,需要安装cropperjs和vue-cropperjs:npminstallcropperjsvue-cropperj......
  • 基于Spring Boot+Vue的大学生创业项目的信息管理系统
    一、系统概述该系统旨在为大学生创业项目提供一个高效、便捷的信息管理平台,帮助创业者更好地管理项目信息、团队成员、进度安排等关键数据。通过SpringBoot和Vue的结合,系统实现了前后端分离,提高了开发效率和系统的可维护性。二、技术架构前端技术:系统前端采用Vue.js框架......
  • springboot+vue的河南天气数据分析与可视化系统python-计算机毕业设计
    目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具Intelli......
  • springboot+vue的二手交易平台评论情感分析系统python-计算机毕业设计
    目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具Intelli......
  • springboot+vue的网购平台用户购买力差异分析及研究python-计算机毕业设计
    目录功能和技术介绍具体实现截图![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/43904518e65045b98fdab97fa21adb87.png)开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于......
  • springboot+vue的股票预测模型系统python-计算机毕业设计
    目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具Intelli......
  • qiankun微前端——接入子应用Vue3+vite实现
    qiankun:乾坤微前端框架什么是微前端Techniques,strategiesandrecipesforbuildingamodernwebappwithmultipleteamsthatcanshipfeaturesindependently.–MicroFrontends微前端是一种多个团队通过独立发布功能的方式来共同构建现代化web应用的技术......