无法清除Gatsby静态站点缓存

Dee*_*jha 3 javascript dom reactjs service-worker gatsby

我有一个使用gatsbyJS的网站(静态网站的反应框架)

现在,我已将该站点移至CMS(WordPress),但是由于我们最初在同一域上使用了gatsbyJS,因此它显示了gatsby构建的旧缓存文件。

我们无法在最初打开gatsby网站的浏览器上访问新网站,因为该网站仅显示了缓存的文件。

通过最初的搜索,我发现了以下几点:

  1. GatsbyJS已针对使用进行脱机访问进行了优化service workers
  2. 为了使服务人员无效,我需要在添加一些脚本之后再次为GatsbyJS静态站点提供服务器,以便当有人访问该站点时,服务人员将无效。
  3. 否则我无法控制服务人员。

我无法返回初始站点,因为该站点已经发布,人们正在关注它,但是仍有许多其他人仍在查看破碎的盖茨比站点。

以上问题有解决方案吗?

Fab*_*ltz 5

您可以尝试将脚本添加到新站点,以删除所有服务工作者,如果有的话:

<script>
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations().then(function(registrations) {
      for (let registration of registrations) {
        registration.unregister();
      }
    });
  }
</script>
Run Code Online (Sandbox Code Playgroud)

如果这还不够,请查看self-destroying-sw

  1. 删除有关先前ServiceWorker的所有信息(注册/卸载代码,ServiceWorker文件)

  2. 创建一个与先前ServiceWorker相同名称的文件,并将其放在先前ServiceWorker所在的位置

  3. 将以下代码放入文件中:

    self.addEventListener('install', function(e) {
      self.skipWaiting();
    });
    
    self.addEventListener('activate', function(e) {
      self.registration.unregister()
        .then(function() {
          return self.clients.matchAll();
        })
        .then(function(clients) {
          clients.forEach(client => client.navigate(client.url))
        });
    });
    
    Run Code Online (Sandbox Code Playgroud)
  4. 部署您的项目!