Работник пользовательского сервиса, предварительно кэшированный с помощью плагина webpack рабочего пакета в Vue-CLI версии 3, кажется нестабильным, когда слышит события выборки.
Этот работник службы использовался в предыдущей версии этого приложения без рабочего ящика и установленного VueJS, и его поведение было более согласованным.
Так в чем же проблема? Проблема в том, что работник сервиса не будет слышать никаких событий извлечения, пока страница сайта не будет перезагружена, НО сайт может быть переведен в автономный режим после некоторой навигации по нему, и кэшированные файлы обслуживаются так, как если бы он был служащим сервиса их. Теоретически сервисный работник не слышит события извлечения, потому что журналы в консоли, которые должны запускаться в этом прослушивателе событий, никогда не отображаются.
Когда страница обновляется, работник службы начинает слышать события выборки, как и следовало ожидать, и вы можете увидеть журналы в консоли.
Что здесь происходит? В предыдущей версии приложения, если работник службы не мог услышать событие извлечения, я получил страницу с ошибкой.
Я просмотрел плагин workbox и документацию по 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 работник службы уже завершил установку и активацию.
Я ожидаю, что если работник службы не сможет слышать события извлечения до перезагрузки, то даже после перехода по сайту и перевода его в автономный режим приложение будет вести себя как обычное веб-приложение и работать с ошибками. С другой стороны, если работник службы фактически слышал события выборки, он должен регистрировать эти события в консоли. Фактический результат находится где-то посередине: работник службы не слышит события извлечения, но приложение все еще работает после точки в автономном режиме даже без обновления.