原因:

导致这个问题的具体原因,是因为在 vue-router 里使用了页面模块懒加载,通过 Vite 打包之后,不同于 Webpack ,生成的 dist/assite 文件夹中,会有很多个小的 js 文件,而 Webpack 打包会生成一个大的 app.js 文件。这样的好处是,大大提升了项目首页开屏的速度!但是缺点上完线之后就暴露出来了,由于上线打包,使用自动化工具,会把之前的项目文件清空,然后把 build 之后的文件移动过来,相当于整个做了一个替换!所以如果客户端不主动刷新浏览器,用户的本地项目还是上一个版本的,当它需要进行跳转页面或者引入其他的包时,自然在服务器上找不到之前的包了

解决方法

1.在public文件里创建一个version.txt文件

2.在router.beforeEach((to, from, next) => {})里请求version.txt

// 是否新版本
      async isNewVersion() {
        let nowVersion = 20250709
        const url = window.location.origin; // 获取当前页面的域名和端口号
        const versionNum  = await axios.get(url+'/version.txt')
        console.log('versionNum', versionNum.data); // Promise {<pending>}
        if(nowVersion != versionNum.data){
          ElMessageBox.confirm(
            '您现在使用的是旧版本,请点击按钮刷新浏览器使用',
            'Warning',
            {
              confirmButtonText: '刷新',
              showCancelButton: false,
              'show-close': false,
              type: 'warning',
              closeOnClickModal: false,
              closeOnPressEscape: false,
            }
          )
            .then(() => {
              // 强制刷新页面
              window.location.reload(true);
            })
            .catch(() => {
              
            })
        }
        
      },

Logo

一站式 AI 云服务平台

更多推荐