vue 后台生产环境自动检测更新

typescript 复制代码
let lastSrcs: any; //上一次获取到的script地址

const scriptReg = /<script.*?type=['"]module['"].*?src=['"](.*?)['"].*?>/g;
/**
 * 获取最新页面中的script链接
 */
async function extractNewScript() {
    const env = import.meta.env.MODE
    if (env !== "production" ) return 
    const html = await fetch('/?_timestamp=' + Date.now()).then((res) => res.text());
    const result:any[] = [];
    // let match: any;
    scriptReg.lastIndex = 0
    const match = scriptReg.exec(html)
    if(match)result.push(match[1]);
    return result;
}
async function needUpdate() {
    const newScripts:any = await extractNewScript();
    if (!lastSrcs) {
        lastSrcs = newScripts;
        return false;
    }
    let result = false;
    if (lastSrcs.length !== newScripts.length) {
        result = true;
    }
    for (let i = 0; i < lastSrcs.length; i++) {
        if (lastSrcs[i] !== newScripts[i]) {
            result = true;
            break;
        }
    }
    lastSrcs = newScripts
    return result

}
const DURATION = 10000;
function autoRefresh() {
    setTimeout(async () => {
        const willUpdate = await needUpdate();
        if (willUpdate) {
            const result = confirm("页面有更新,点击确定刷新页面");
            if (result) {
                location.reload();
            }
        }
        autoRefresh();
    }, DURATION);
}
autoRefresh()

main.ts

import '@/utils/auto.update'

相关推荐
志尊宝24 分钟前
Vue3 零基础每日笔记(080):Vue3 + ECharts 数据可视化——封装可复用图表组件
前端·javascript·vue.js·笔记·信息可视化·echarts
阿狗童鞋25 分钟前
前端工程化实战指南
前端
CappuccinoRose25 分钟前
CSS 动效基础
前端·css·动画·animation·transition
用户44028182780725 分钟前
我用 TRAE 一晚上从零撸了个微信投票小程序: 17 个云函数 + 11 个页面的全链路实战
前端
BullSmall28 分钟前
SonarQube 9.9.8-community 适配 Jenkins 版本说明
java·前端·jenkins
tryCbest30 分钟前
第一篇:HTML5 核心知识全解 + 项目起步
前端·html·html5
百度一下吧37 分钟前
CSS 伪类使用与实践:从入门到进阶
前端·css
hunterandroid39 分钟前
android方案 : Multiplatform 跨平台开发实战:一套代码,多端运行
android·前端
百度一下吧42 分钟前
CSS3 之后新增的特性:从 CSS4 到现代 CSS 的演进
前端·css·css3