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",