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 只会清除由旧版本的工作箱库创建的缓存。在这种情况下,由于您使用的是相同版本的工作箱,因此调用此方法不会执行任何操作。
一旦特定文件被 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
说明
我在使用 Workbox 时遇到问题,当文件内容更改时我的网站不会更新,除非我在浏览器中手动清除 storage/site 数据。
自今年v4发布以来,我的代码中的cleanupOutdatedCaches应该会解决这个问题,但问题仍然存在。
例子
我创建了 this website 来举例说明。一旦你访问它,Workbox 就会安装 service worker,但是如果我将 test1
更改为 test2
,你将看不到更改,除非你清除浏览器中的站点数据并刷新。
我也试过只注销软件;它显示更新版本 (test2),但刷新两次后又回到旧版本 (test1)。
您可以在GitHubhere中查看网站代码。
提前致谢,
路易斯
cleanOutdatedCaches 只会清除由旧版本的工作箱库创建的缓存。在这种情况下,由于您使用的是相同版本的工作箱,因此调用此方法不会执行任何操作。
一旦特定文件被 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