Workbox 的 service worker 在更改时不更新

Workbox's service worker not updating when changed

说明

我在使用 Workbox 时遇到问题,当文件内容更改时我的网站不会更新,除非我在浏览器中手动清除 storage/site 数据。

自今年v4发布以来,我的代码中的cleanupOutdatedCaches应该会解决这个问题,但问题仍然存在。

例子

我创建了 this website 来举例说明。一旦你访问它,Workbox 就会安装 service worker,但是如果我将 test1 更改为 test2,你将看不到更改,除非你清除浏览器中的站点数据并刷新。

我也试过只注销软件;它显示更新版本 (test2),但刷新两次后又回到旧版本 (test1)。

您可以在GitHubhere中查看网站代码。

提前致谢,
路易斯

cleanOutdatedCaches 只会清除由旧版本的工作箱库创建的缓存。在这种情况下,由于您使用的是相同版本的工作箱,因此调用此方法不会执行任何操作。

https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.precaching#.cleanupOutdatedCaches

一旦特定文件被 Workbox 预缓存,它将永远不会尝试从网络中检索该文件,除非您在 precacheAndRoute 调用中指定的修订不同于以前缓存过。

由于您更改了 index.html 而不是 precacheAndRoute 中的修订版,Workbox 假定文件未更改。所以,你需要做的是更新 precacheAndRoute 与新版本对应的新散列 index.html

您可以通过使用 injectManifest 来实现 https://developers.google.com/web/tools/workbox/modules/workbox-build

或您使用的任何其他构建工具。

编辑:

您也可以通过编程方式调用 skipWaiting https://developers.google.com/web/tools/workbox/modules/workbox-core#skip_waiting_and_clients_claim

但您确实需要谨慎使用它。这是一种方法: https://developers.google.com/web/tools/workbox/guides/advanced-recipes