TypeError: Failed to fetch dynamically imported module: https:/xxx.com/assets/index.js
导致这个问题的具体原因,是因为在 vue-router 里使用了页面模块懒加载,通过 Vite 打包之后,不同于 Webpack ,生成的 dist/assite 文件夹中,会有很多个小的 js 文件,而 Webpack 打包会生成一个大的 app.js 文件。这样的好处是,大大提升了项目首页开屏的速度!但是缺点上完线之后就暴露出来了,由于上线打包,使用自动化工具,会把之前的项目文件清空,然后把
·

原因:
导致这个问题的具体原因,是因为在 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(() => {
})
}
},
更多推荐




所有评论(0)