1.原因
- 每次前端发版,由于用户没有刷新页面,所以浏览器本地的代码是旧版的,无法及时获取最新版本
- 此时可以通过维护一个版本编号,并根据编号确认前端是否发版来进行页面刷新
2.配置
2.1 封装版本维护代码
const fs = require("fs");
const path = require("path");
const packageUrl = path.resolve(process.cwd(), "./package.json");
function getPackageJson() {
const data = fs.readFileSync(packageUrl);
return JSON.parse(data);
}
function updateVersion() {
let packageJson = getPackageJson();
const time = new Date();
let year = time.getFullYear();
let month = time.getMonth() + 1;
let day = time.getDate();
let hour = time.getHours();
const min = time.getMinutes();
if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;
if (hour < 10) hour = "0" + hour;
year = year - 2000;
packageJson.version = "2." + year + "." + month + day + hour + min;
fs.writeFile(packageUrl, JSON.stringify(packageJson, null, "\t"), err => {});
}
module.exports = {
getPackageJson,
updateVersion
};
const { MessageBox } = require("element-ui");
const VERSION_KEY = "VERSION";
export function isUpdateVersion() {
return new Promise((resolve, reject) => {
const currentVersion = VERSION;
const localVersion = window.localStorage.getItem(VERSION_KEY) || "";
if (!localVersion || currentVersion !== localVersion) {
window.localStorage.setItem(VERSION_KEY, currentVersion);
MessageBox.alert("当前版本已更新,请刷新页面", "版本更新提示", {
confirmButtonText: "确定",
type: "warning",
showClose: false
}).then(() => {
window.history.go(0);
});
resolve(false);
} else {
resolve(true);
}
});
}
const { getPackageJson } = require("./src/config/version-watch");
plugins: [
new webpack.DefinePlugin({
VERSION: JSON.stringify(getPackageJson().version)
})
],
const { updateVersion } = require("./version-watch");
updateVersion();
{
"version": "2.23.09181447",
"scripts": {
"dev": "npm run version && vue-cli-service serve",
"build:prod": "npm run version && vue-cli-service build",
"build:dev": "npm run version && vue-cli-service build --mode development",
"version": "node ./src/config/index.js"
},
}
3.使用
- 可以在页面入口处使用轮询判断版本
- 在接口调用处判断
import { isUpdateVersion } from "@/config/version-reload.js";
instance.interceptors.request.use(
config => {
isUpdateVersion();
}
)
4.发版效果
