删除服务-worker.js(特例)

Remove service-worker.js (special case)

我所说的特殊情况是指我在使用 create-react-app 时需要删除旧的 service worker。 在将整个网站切换为使用 gatsby 之前,我应该在使用 cra 时删除它。 有了 gatsby,我知道我可以像这样删除 service worker

 //'gatsby-plugin-offline',
'gatsby-plugin-remove-serviceworker'

但是在用户的浏览器上,他们很久以前访问过我的网站,当时我的网站使用的是 CRA,并且他们的设备上安装了 Service Worker。然后是我的愚蠢,我在迁移到 gatsby 之前没有删除 CRA 的 service worker。 所以现在,我的网站正在使用 gatsby,我已将其配置为像上面的代码一样删除 service worker。但它不会删除 CRA 的 service worker。 在 gatsby-browser.js 上我试过这段代码,但它不起作用。

export const onClientEntry = async () => {
    if ('serviceWorker' in navigator) {

        navigator.serviceWorker.getRegistrations().then(function(registrations) {

        for(let registration of registrations) {
            console.log('Service Worker registration removed: ');
                registration.unregister()

        }}).catch(function(err) {

            console.log('Service Worker registration failed: ', err);

        });
    }
} 

相关信息: My CRA 的网站曾经托管在 AWS 上,并由云端交付。 然后我使用 gatbsy 的网站目前托管在 Netlify 上,DNS 由 AWS 管理。 我需要在 netlify 上托管网站,因为我使用的是 netlify cms。

我已经找到解决办法了。 CRA 的 service worker 不会被注销,因为我当前的 gatsby 站点没有 service-worker.js 文件。 因此,通过在静态文件夹中添加一个 service-worker.js 文件,它将起作用。

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.ready.then(registration => {
      registration.unregister();
    });
  }