用途:解决前端部署新版本后,部分用户仍看到旧界面、刷新后仍是旧版、config.json 已更新但浏览器仍读旧值,以及“版本过期”弹窗重复弹出或不弹出的问题。
主要能力:定位四类根因,包括 vite.config.ts 的 chunkFileNames 缺少 [hash] 导致浏览器缓存旧 JS;VersionChecker 中 emptyCache() 为同步执行,reload 早于缓存删除;缺少并发守卫导致 getData 重复调用、弹窗与刷新重复;fetch 使用浏览器缓存读到旧 config.json。修法涉及两个文件:在 vite.config.ts 的 chunkFileNames 加入 [hash](如 assets/js/[name].[hash].js);重写 VersionChecker.tsx,加入 isCheckingRef、isPromptOpenRef、isReloadingRef 三个守卫,fetch 使用 cache: "no-store",emptyCache 改为 async 并用 caches.keys() 与 Promise.all 等待删除完成后再 reload,错误改用 console.error。
使用方式:按技能步骤修改上述两个文件,然后执行 npm run build 验证构建,用 ls dist/assets/js/ 确认输出文件名带哈希,并在 DevTools 的 Network 面板开启 Disable cache 测试 config.json 是否带 Cache-Control: no-store、弹窗是否只出现一次、刷新后是否加载新版本。
适用场景:使用 Vite 构建、带 VersionChecker 轮询 config.json 版本的前端项目。
限制:资料未提供安装命令、依赖版本、适用框架范围、兼容性、收费与效果保证等信息;示例代码针对特定项目结构,直接套用前需自行核对路径与常量。