PWA离线缓存不生效,刷新就白屏怎么办?
我用 Create React App 搭了个 PWA 应用,本地测试时 service worker 注册成功了,但一断网刷新页面就白屏,资源根本没被缓存下来。是不是哪里配置错了?
我试过在 index.js 里调用 register(),也确认 workbox 被引入了,但离线完全不能用:
import { register } from './serviceWorkerRegistration';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
// 注册 service worker
register({
onSuccess: () => console.log('SW registered'),
onUpdate: () => console.log('SW updated')
});
是不是还需要手动配置缓存策略?现在连首页 HTML 都加载不出来……
第一步是确认你的
serviceWorkerRegistration.js文件配置是否正确。这个文件通常会包含 Workbox 的配置,用来定义哪些资源需要被缓存。第二步是要确认在开发模式下 service worker 是否正常工作。Create React App 默认在开发环境禁用了 PWA 功能,你需要修改
src/index.js来强制启用:这里的关键是
skipWaiting: true,这可以保证每次更新时立即生效,而不是等到所有标签页关闭。第三步要检查 Chrome DevTools 的 Application 标签页里 service worker 的状态。确保它已注册并处于 active 状态。如果还是有问题,尝试清除所有站点数据再重试。
原理上,PWA 需要明确告诉浏览器哪些资源要缓存、用什么策略缓存。默认情况下,只有打包进 manifest 的资源会被缓存。所以我们要手动为 HTML 页面添加缓存规则。
最后吐槽一句,PWA 确实是个好东西,但调试起来真挺头疼的。特别是开发环境下各种奇怪的问题,我都经历过...希望能帮到你!