生产部署了,如何通知用户更新?

127 阅读1分钟

背景

前端代码发布后,如何及时的通知用户, 让用户刷新? 避免使用旧功能,体验新功能

方案

采用 vite构建生成时间戳+ 接口调用的方式

vite构建,记录时间

在生产构建的时候, 通过writeFileSync 方式生成一个文件,里面内容为构建的时间及版本信息

// VITE_APP_BUILD_TIME 存于app内的构建时间
 process.env.VITE_APP_BUILD_TIME = Date.now().toString()
// 写入第三方文件的构建时间(每次构建会被覆盖)
writeFileSync(`${process.cwd()}/public/build-time`, `build-time=${Date.now().toString()}\r\nversion=${process.env.npm_package_version}`)

接口调用 + 触发事件

每个项目不同, 在vue项目中可以在全局router.beforeEach中增加接口调用

router.beforeEach((to, from, next) => {
   fetch(`./build-time?t=${Date.now()}`, {}).then(() =>{
       //...
       // 拿到结果后,进行事件触发
       mitt.emit(name, res)
   )
}

全局注册mitt

app.config.globalProperties.$EventBus = mitt

事件响应


proxy?.$EventBus.on(name, content => {
    // 对比时间, content.time为构建时间, VITE_APP_BUILD_TIME为app内的构建时间
    if(content.time - +import.meta.env.VITE_APP_BUILD_TIME > 10){
        // 打开右下角提示更新弹窗
    }
})

结束

以上把更新方式的关键流程进行了说明, 具体细节可以根据需求自定义开发, 总体流程大概都是这样