自动检查线上版本是否更新,提示用户刷新页面

自动检查线上版本是否更新,提示用户刷新页面

参考: https://blog.csdn.net/weixin_59703592/article/details/138647171
实现思路:

  1. public中创建version.json文件用于记录当前版本号

    {
    "version": "1.0"
    }	
    
  2. 每次build时更新版本号

    // vite.config.js
    import path from 'path';
    import fs from 'fs';
    // 自动写入文件更新版本号
    function updateVersion() {
      return {
        name: 'update-version',
        buildStart() {
          let version = ''
          try {
            // 读取json文件里面的版本号
            const packageJson = JSON.parse(fs.readFileSync(path.resolve('public/version.json'), 'utf-8'))
            version = Number(packageJson.version)
            console.log('version1', version);
            version = (version + 0.1).toFixed(1)
            console.log('version2', version);
            
          } catch (error) {
            console.log('vite.config.js updateVersion error',error);
          }
          const versionData = { version: version }
          // 写入json文件
          fs.writeFileSync('public/version.json', JSON.stringify(versionData))
        }
      }
    }
    export default ({ mode }) => {
      return {
        plugins: [
          process.env.NODE_ENV === 'production' && updateVersion() // 在pugins中引入
        ],
      };
    };
    
    
  3. 每次在路由跳转后执行以下函数,读取最新版本号对比本地版本号

    // 版本号管理工具
    import axios from "axios";
    export async  function isNewVersion() {
        // 获取当前页面url地址
        const url = `//${window.location.host}/version.json`;
        try {
            const res = await axios.get(url);
            // 获取线上版本号
            const newVersion = res.data.version
            // 获取本地版本号
            const localVersion = window.localStorage.getItem('version')
            // 判断线上和本地版本是否一致
            if(localVersion && localVersion !== newVersion) {
                
                // 不一致,提示用户刷新页面
                alert('有新版本发布,请刷新页面!')
                // 存储最新版本号到本地
                window.localStorage.setItem('version', newVersion)
                // 刷新页面
                window.location.reload()
            }else {
                // 如果本地没有存储版本号,则存储最新版本号
                window.localStorage.setItem('version', newVersion)
            }
        } catch (error) {
            console.log('获取线上版本号失败utils/version.js', error);
        }
    }
    
    1. 在测试过程中发现,虽然可以更新版本号,但是在我的项目中使用的是自动化部署工具,只能在每次部署项目时更新打包后的版本号,不能更新上线分支中的版本号。也就是说假如当前master分支的版本号是1.0,每次上线部署后版本号都是1.1,而不会基于上次的版本号更新,因为master代码并没有更新过。

      对于我的项目中的需求,只是需要用户刷新页面,所以其实可以将版本号换成一个时间戳,确保每次部署时的版本都是与之前的不一样就行了。

前端线上部署是指将前端代码部署到生产环境,使用户可以访问和使用最新的前端功能和界面。通知用户有新版本可以通过以下几种方式实现: 1. 弹窗通知:在用户访问网站或应用时,弹出一个通知窗口告知用户有新版本可用。这可以通过在前端代码中添加一个弹窗组件,并在后端部署新版本时触发弹窗通知。 2. 横幅通知:在网站或应用的顶部或底部添加一个横幅,显示有新版本可用的提示信息。这可以通过在前端代码中添加一个固定位置的横幅组件,并在后端部署新版本时触发横幅通知。 3. 电子邮件通知:将新版本的信息发送给用户的注册邮箱,通知他们有新版本可用。这可以通过在后端代码中添加一个发送邮件的功能,并在部署新版本时触发邮件通知。 4. 短信通知:将新版本的信息发送给用户的手机号码,通知他们有新版本可用。这可以通过在后端代码中添加一个发送短信的功能,并在部署新版本时触发短信通知。 5. APP推送通知:对于移动应用,可以使用推送通知的方式通知用户有新版本可用。这可以通过在后端代码中添加一个推送通知的功能,并在部署新版本时触发推送通知。 需要注意的是,以上通知方式需要在前端和后端代码中进行相应的开发和配置。具体的实现方式可以根据项目需求和技术栈来选择和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值