背景:
随着项目体量越来越大,用户群体越来越多,用户的声音也越来越明显;关于应用发版之后用户无感知,导致用户用的是仍然还是老版本功能,除非用户手动刷新,否则体验不到最新的功能;这样的体验非常不好,于是我们团队针对该问题给出了相应的解决方案来处理;
技术栈:vue3+ts+vite+ant-design-vue
1、web应用版本检测方案:
1.1、基于vite开发自定义插件version-update,vite打包流程运行version-update插件在项目结构目录public文件夹下生成version.json文件,通过读取version.json文件内容与服务器上的资源文件作为版本更新的比对依据
1 /** src/plugin/versionUpdate.ts **/ 2 import fs from 'fs' 3 import path from 'path' 4 interface OptionVersion { 5 version: number | string 6 } 7 interface configObj extends Object { 8 publicDir: string 9 } 10 11 const writeVersion = (versionFileName: string, content: string | NodeJS.ArrayBufferView) => { 12 // 写入文件 13 fs.writeFile(versionFileName, content, (err) => { 14 if (err) throw err 15 }) 16 } 17 18 export default (options: OptionVersion) => { 19 let config: configObj = { publicDir: '' } 20 return { 21 name: 'version-update', 22 configResolved(resolvedConfig: configObj) { 23 // 存储最终解析的配置 24 config = resolvedConfig 25 }, 26 27 buildStart() { 28 // 生成版本信息文件路径 29 const file = config.publicDir + path.sep + 'version.json' 30 // 这里使用编译时间作为版本信息 31 const content = JSON.stringify({ version: options.version }) 32 /** 判断目录是否存在 */ 33 if (fs.existsSync(config.publicDir)) { 34 writeVersion(file, content) 35 } else { 36 /** 创建目录 */ 37 fs.mkdir(config.publicDir, (err) => { 38 if (err) throw err 39 writeVersion(file, content) 40 }) 41 } 42 } 43 } 44 }
09-17 11:47