Angular Service Worker未遵循配置,所有请求被异常缓存
Angular Service Worker 未遵循配置缓存所有API的解决办法
我未在ngsw.json配置中指定需缓存的API地址,但Angular Service Worker却缓存了所有请求;即使强制刷新页面,ngsw-worker.js仍不遵守配置规则:
- 图1:展示了未在配置中定义却被缓存的API请求
- 图2:列出了所有从Service Worker获取响应的未配置API
当前ngsw.json配置如下:
{"index": "/index.html","assetGroups": [{"name": "app","installMode": "prefetch","resources": {"files": ["/favicon.ico","/index.html","/manifest.webmanifest","/*.css","/*.js"]}},{"name": "assets","installMode": "lazy","updateMode": "prefetch","resources": {"files": ["/assets/**","/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"]}}],"dataGroups": [{"name": "api-freshness","urls": ["/keycloak.json","/api/user-config/**","/applications/**","/api/services"],"cacheConfig": {"strategy": "freshness","maxSize": 1000,"maxAge": "1d","timeout": "1s"}}]}
解决步骤:
确认Service Worker配置已更新
打开浏览器DevTools的「Application > Service Workers」,检查当前激活的SW版本是否对应最新的ngsw.json。若不一致,手动点击「Update」按钮,或重新执行ng build --prod构建部署,确保新配置生效。排查额外缓存逻辑
检查项目中是否存在自定义SW代码、第三方缓存插件,这些可能会覆盖Angular SW的默认规则;同时确认没有注册额外的Service Worker。验证配置匹配规则
检查ngsw.json的dataGroups是否存在意外通配符(比如/**),构建后确认配置文件未被篡改。通过Network面板查看请求的SW相关响应头,确认请求匹配的缓存组。清除旧缓存与SW注册
在DevTools的「Application > Storage」中点击「Clear site data」,彻底清除缓存和SW注册信息;也可在控制台执行代码注销SW:navigator.serviceWorker.getRegistrations().then(regs => regs.forEach(reg => reg.unregister()))执行后刷新页面。
检查Angular版本兼容性
部分旧版Angular存在SW缓存bug,确认当前版本是否有已知问题,必要时升级至稳定版。
内容的提问来源于stack exchange,提问作者M Fahad
相关产品推荐
相关产品推荐

