我所说的特殊情况是指,当我使用 create-react-app 时,我需要删除旧的 Service Worker。 我应该在使用 cra 时将其删除,然后再将整个网站切换为使用 gatsby。 有了 Gatsby ,我知道我可以像这样删除服务人员
//'gatsby-plugin-offline',
'gatsby-plugin-remove-serviceworker'
但是在用户的浏览器上,他们很久以前访问了我的网站,当时我的网站正在使用 CRA,并且在他们的设备上安装了 Service Worker。然后我很愚蠢,在搬到 Gatsby 之前我没有删除 CRA 的服务人员。 所以现在,我的网站正在使用 gatsby,我已将其配置为删除服务 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);
});
}
}
相关资料: 我的 CRA 网站过去托管在 AWS 上,并由 cloudfront 交付。 然后我使用 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();
});
}
关于amazon-cloudfront - 删除service-worker.js(特殊情况),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56886891/