我是 Vue 新手,使用 PWA Service-worker 插件创建了一个项目。部署我的应用程序的新版本后,我在控制台中收到以下消息:
刷新页面 (F5) 后,这些消息仍然以相同的方式显示,应用程序仍处于旧状态。我尝试了所有方法来清除缓存,但它仍然无法加载新内容。
创建项目后,我没有更改默认配置的任何内容,也没有添加任何与 serviceworker 交互的代码。出了什么问题?我错过了什么吗?
原文由 user5242820 发布,翻译遵循 CC BY-SA 4.0 许可协议
我是 Vue 新手,使用 PWA Service-worker 插件创建了一个项目。部署我的应用程序的新版本后,我在控制台中收到以下消息:
刷新页面 (F5) 后,这些消息仍然以相同的方式显示,应用程序仍处于旧状态。我尝试了所有方法来清除缓存,但它仍然无法加载新内容。
创建项目后,我没有更改默认配置的任何内容,也没有添加任何与 serviceworker 交互的代码。出了什么问题?我错过了什么吗?
原文由 user5242820 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想出了一个不同的方法来解决这个问题,从我目前所看到的情况来看,它工作正常。
updated() {
console.log('New content is available; please refresh.');
caches.keys().then(function(names) {
for (let name of names) caches.delete(name);
});
},
这里发生的事情是,当在服务工作者中调用更新的函数时,它会经过并删除所有缓存。这意味着如果有更新,您的应用程序启动速度会变慢,但如果没有更新,它将提供缓存的资产。我更喜欢这种方法,因为服务人员可能很难理解,而且从我读过的内容来看,不推荐使用 skipWaiting() ,除非你知道它的作用和副作用。这也适用于我目前使用的 injectManifest 模式。
原文由 Aaron Angle 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.4k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
正如我所了解的,这个问题实际上只与 PWA 的初学者有关,他们不知道您可以(并且需要)配置 PWA 来实现这一目标。如果你觉得现在(并且正在使用 VueJS)得到解决,请记住:
要自动下载新内容,您 需要 配置 PWA。在我的情况下(VueJS),这是通过在我的项目的根目录中创建一个文件
vue.config.js
来完成的(与package.json
处于同一级别)。在这个文件中你需要这个:
如果检测到,它将自动下载您的新内容。但是,内容还不会显示给您的客户端,因为它需要在下载内容后刷新。我通过在我的
src/
目录中添加window.location.reload(true)
到registerServiceWorker.js
--- 来做到这一点:现在,如果 Service Worker 检测到新内容,它会自动下载并刷新页面。