vite前端版本升级,刷新页面

创建versionUpdatePlugin文件

javascript 复制代码
// versionUpdatePlugin.js

const writeVersion = async (versionFile, content) => {
    const fs = await import('fs').then((module) => module.default);
    // 写入文件
    fs.writeFile(versionFile, content, (err) => {
        if (err) throw err
    })
}

export default (options) => {
    let config
    return {
        name: 'version-update',

        configResolved(resolvedConfig) {
            // 存储最终解析的配置
            config = resolvedConfig
        },

        async buildStart() {
            const fs = await import('fs').then((module) => module.default);
            const path = await import('path').then((module) => module.default)
            // 生成版本信息文件路径
            const file = config.publicDir + path.sep + 'version.json'
            // 这里使用编译时间作为版本信息
            const content = JSON.stringify({ version: options.version })
            if (fs.existsSync(config.publicDir)) {
                writeVersion(file, content)
            } else {
                fs.mkdir(config.publicDir, (err) => {
                    if (err) throw err
                    writeVersion(file, content)
                })
            }
        },
    }
}

修改vite.config.js文件

css 复制代码
1. const now = new Date().getTime(); // 定义一个时间戳

2.   plugins: [
    versionUpdatePlugin({
      version: now
    })
  ],
  plugins中引入versionUpdatePlugin方法
3. 定义全局变量
  define: {
    __APP_VERSION__: now,
  }

使用

javascript 复制代码
// 添加 beforeEach 导航守卫
router.beforeEach(async (to, from, next) => {
    await versionCheck() // 版本监控
    next()
});

// 版本监控
const versionCheck = async () => {
    if (process.env.NODE_ENV === 'development') return
    const response = await axios.get('version.json')
    if (__APP_VERSION__ !== response.data.version) {
        // console.log('有新版本,刷新页面');
        setTimeout(() => {
            window.location.reload()
        }, 500)
    }
}
相关推荐
Agent世界2 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
FungLeo2 小时前
成为全栈·Vue 管理后台篇·编辑器图片上传:从文件选择到文章附件关联
前端·vue.js·编辑器·markdown·文件上传·formdata·附件管理
某哈压力大2 小时前
SSH 突然 Connection reset?不是密钥坏了,是 OpenSSL 把 sshd 干趴了
前端·node.js·命令行
程序员大阳2 小时前
副队长ES6+教程(3)--解构赋值
前端·javascript·es6·赋值·解构
神膘护体小月半3 小时前
css - 元素背景图由 hover 触发,初次加载时闪动的解决办法
前端·javascript·css
程序员大阳3 小时前
副队长ES6+教程(2)--let 与 const
前端·javascript·es6·const·let·var
deli0073 小时前
写满 200GB 后 SSD 为什么掉到 95MB/s?SLC 缓存模型实测
前端
曦樂~4 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
deli0074 小时前
HTTPS 的锁是怎么挂上的?TLS 1.3 握手 6 步实测
前端
程序员大阳4 小时前
副队长ES6+教程(1)--ES6+初识
前端·ecmascript·es6