前端项目发布新版本后,浏览器正打开着本项目,怎么提示用户更新新版本呢?

1. 写一个plugins,代码如下:

const isNewVersion = (isTip) => {
  let url = `//${window.location.host}/version.json?t=${new Date().getTime()}`;
  axios.get(url).then(res => {
    if (res.status !== 200) {
      return;
    }
    const key = import.meta.env.VITE_SYSTEM_NAME + 'ProjectVersion';
    // 当前版本
    const projectVersion = res.data.version;
    // 历史版本
    const localProjectVersion = localStorage.getItem(key);
    // 历史版本存在 && 版本号已修改
    if (localProjectVersion && localProjectVersion != projectVersion && isTip) {
      ElMessageBox.confirm('检测到系统当前版本已更新,请刷新浏览器后使用').then(() => {
        localStorage.setItem(key, projectVersion);
        window.location.reload();
      }).catch(() => null);
    } else {
      localStorage.setItem(key, projectVersion);
    }
  }).catch(() => { });
};

// 版本号对比 
isNewVersion(false);

// 安装
function install(app) {
  // 如果是开发环境
  if (import.meta.env.MODE === 'development') {
    return;
  }
  app.config.errorHandler = () => {
    // 版本号对比
    isNewVersion(true);
    // 处理错误,例如发送到后端记录,或者在控制台打印
    // console.error(`全局错误捕获:${err.message}\n更多信息:${info}`);
  };
}
export default {install};

2. 在main.ts 中 注册该插件

// 版本号对比
import versionTood from '/@/plugins/versionUpdate.js'
...
app.use(versionTood) //版本号对比

3. 在public文件夹中创建 versionChange.js 文件,内容如下:

//npm run build打包前执行此段代码 最终会在public文件夹中生成version.json文件
// version.json内容 { "version": "ZS_1739411229796" }

let fs = require('fs');

const packageData = {
  version: 'ZS_' + Date.now()
};

//用packageData覆盖version.json内容
fs.writeFile(
  './public/version.json',
  JSON.stringify(packageData, null, '\t'),
  () => {
  }
);

4. 在package.json 文件中 修改build 命令,代码如下:

"scripts": {
    "dev": "vite --force",
    "build": "node ./public/versionChange.js && cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容