在Vue-CLI版本3中预缓存有工作箱Webpack插件的自定义服务工作者在听取获取事件时似乎不稳定。
在此应用程序的早期版本中使用了此服务工作者,但未安装工作盒和VueJS,并且其行为更加一致。
那是什么问题?问题在于,直到重新加载站点上的页面之前,服务工作者将不会听到任何获取事件,但是在网站上进行一些导航之后,可以将站点置于脱机模式,并且可以像服务工作者正在服务一样来缓存文件他们。从理论上讲,服务人员不会听到获取事件,因为控制台中本应在该事件侦听器中触发的日志从不会显示。
刷新页面后,服务人员会开始听到提取事件,就像您期望的那样,您可以在控制台中看到日志。
这是怎么回事?在该应用的先前版本中,如果服务人员听不到提取事件,则会显示错误页面。
我已经浏览了工作箱插件和Vue CLI文档,但是对此一无所获。我确实意识到您可以设置服务人员立即声明客户身份,这是我接下来要解决的“仅重载”问题,但我的问题与此无关。
服务工作者位于公共共享目录的根目录中,文件已预先缓存并存在于您期望的位置,等等。
在vue.config.js文件中:
pwa : {
...
workboxOptions : {
swSrc : './src/service-worker.js'
},
workboxPluginMode : 'InjectManifest'
}
在service-worker.js中获取事件:
self.addEventListener('fetch', e => {
console.log('[Service Worker] in process of fetching');
console.log(e.request.url);
// .... doStuff();
});
Workbox处理服务人员的实际注册,因此,一旦安装了主要的Vue组件,服务人员就已经完成了其安装和激活。
我希望,如果服务工作人员直到重新加载后才能听到提取事件,即使在浏览站点然后将其置于脱机模式之后,该应用程序的行为也将像典型的Web应用程序一样,并且会出错。另一方面,如果服务人员实际上正在听到提取事件,则应将这些事件记录在控制台中。实际结果介于两者之间:服务工作者没有听到获取事件,但是即使处于离线状态,即使没有刷新,应用程序仍然可以正常工作。