Repository navigation
fix(pwa): 新版本部署后自动刷新页面,预览站点不使用 Service Worker 缓存 - #402
Conversation
站点通过 Workbox 预缓存全部页面并优先从缓存读取。原先使用插件注入的 registerSW.js, 它只注册 Service Worker,新版本在后台激活后页面不会刷新,读者需要再次刷新或跳转才能看到更新。 - 主题中改用 virtual:pwa-register 注册,autoUpdate 模式下新版本激活后自动刷新页面 - 新增 workbox-window 依赖(virtual:pwa-register 需要) - Preview Build 设置 PWA_SELF_DESTROYING,预览站点生成自我注销的 Service Worker
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
文档预览已部署
由 Preview Deploy 自动生成,PR 每次更新后会刷新这条评论。 |
问题
部署新版本后(包括 PR 预览),浏览器有时仍显示旧内容,过一会儿或再刷新一次才更新。
排查结果:
sw.js响应头均为cache-control: public, max-age=0, must-revalidate,cf-cache-status: MISSprecacheAndRoute优先从缓存读取。访问时先返回缓存中的旧页面,同时在后台安装新版本 Service Worker。插件注入的registerSW.js只调用navigator.serviceWorker.register('/sw.js'),新版本激活后页面不会刷新改动
theme/index.ts:改用virtual:pwa-register注册 Service Worker。autoUpdate模式下,新版本激活后会自动刷新页面;引入该模块后插件不再注入registerSW.jspackage.json:新增workbox-window开发依赖(virtual:pwa-register需要,版本与锁文件中已有的 7.4.1 一致)config.mts:selfDestroying由环境变量PWA_SELF_DESTROYING控制preview-build.yml:预览构建设置PWA_SELF_DESTROYING=true,预览站点生成自我注销的 Service Worker(注销自身、清空缓存并刷新页面),评审时始终拿到最新内容;生产构建不受影响注意:
injectRegister保持默认的auto。如果设为false,vite-plugin-pwa 不会再自动开启skipWaiting/clientsClaim,新版本 Service Worker 会一直处于 waiting 状态。验证
本地用 headless Chrome 模拟“访客已有旧版本缓存 → 部署新版本 → 再次访问”:
mainPWA_SELF_DESTROYING=true)pnpm check、pnpm build(两种模式)均通过。Summary by CodeRabbit
These changes improve how the site and preview builds behave when loaded in a browser.