我已经通过现有项目将我的站点的新版本(它在 Polymer 上,现在在 Vue.js 上)部署到 Firebase。
我vue init webpack my-project
在新项目中使用带有 Webpack ( ) 的默认 Vue.js 模板
现在我已经部署了新版本,当我打开站点时,我只看到一个缓存的 shell,我认为这是服务人员的错
为了从 Firebase 获取实际的当前文件,我(以及所有以前的访问者)现在必须每次都硬刷新站点(Ctrl+F5
在 firefox 中)
安慰
现在,在浏览器控制台(网络选项卡)中,我看到:
红色的服务人员,它说:
(failed) net::ERR_INSECURE_RESPONSE
当我正常打开网站时(没有硬刷新)一些文件的大小属性为
(from ServiceWorker)
- 这些文件有cache-control:max-age=3600
,但自从我部署新版本的站点以来已经一个多小时了。看起来服务工作者本身没有任何标题,也许这就是它不断加载旧文件的原因
我已将此代码添加到firebase.json
,然后npm run build
尝试删除服务人员,但我仍然遇到问题
Firebase.json
{
"hosting": {
"public": "dist",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
],
"headers": [
{ "source":"/service-worker.js", "headers": [{"key": "Cache-Control", "value": "no-cache"}] }
]
}
}
上一个项目中的 Service Worker 代码
我没有在新部署的版本上使用任何服务人员。但是之前的部署注册了一个服务工作者
我使用的是 Polymer 1.0 框架库中的默认 sw-precache 组件,该组件是在我使用的预配置的 Polymer 入门工具包模板中构建的。Service Worker 是在构建时生成的
捆绑 > service-worker.js: https ://jsfiddle.net/uydjzw13/
未捆绑 > service-worker.js: https ://jsfiddle.net/t42fdgow/
问题:
有没有办法从所有站点访问者的浏览器中删除旧的服务工作者,以便他们总是获得新部署的版本?也许我可以用 Webpack 或 Firebase 以某种方式做到这一点?
如果我只是从 Firebase 中删除先前使用服务人员部署的版本,它会得到修复吗?
或者,如果可能的话,也许我可以使用具有唯一功能的服务工作者部署另一个版本,该功能可以删除所有以前的缓存并取消注册以前的服务工作者?
或者我可以使用这样的东西吗?:https ://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/unregister
我不确定如何正确地做到这一点,并且不会意外地注册更多我也无法摆脱的服务人员。