首页 > 解决方案 > 从 React 切换到 Next.js 后,由于 Service Worker 的缓存,网站没有刷新。如何强制更新?

问题描述

在 react 上制作的网站有一个用于缓存的服务人员。我们使用 unregister() 代码运行网站,并将网站移植到 Next.js。尽管在某些机器上,注销代码从未运行过,所以现在这些机器正在运行旧的 react 代码,并且没有反映所做的任何更改并推送到服务器。这些更改正在隐身和其他运行取消注册代码的机器上运行。它在 Caddy 服务器上。

如何强制它从服务器端刷新?我们可以清除缓存或注销我们机器上的服务工作者,但我们不知道有多少客户端拥有旧代码。

谢谢!

标签: reactjswebnext.jscaddy

解决方案


所以问题已经解决了。制作了一个新的服务工作者文件,只包含删除服务工作者的代码。

if ("serviceWorker" in navigator) {
  window.addEventListener("load", function () {
    navigator.serviceWorker.getRegistrations().then((registrations) 
=> {
      for (let registration of registrations) {
       registration.unregister().then((bool) => {
          console.log("unregister: ", bool);
        });
     }
    });
  });
}

并将此文件放在保存前一个 service worker 的确切位置(您可以从 chrome 开发人员工具中找到它)。还包括在 index.html 或 _document.js(对于 next.js)中链接此文件的脚本标记。这应该可以解决问题。


推荐阅读