Я использую плагин Workbox Webpack (v4.3.1) для генерации сценария работника сервиса и плагина Workbox-Window (v4.3.1) для его регистрации.
Все отлично работает в среде разработчика (Iиспользовать сервер веб-пакетов), но при производственной сборке я получаю сообщение об ошибке ниже на консоли разработчика Chrome (v78):
Uncaught (in promise) TypeError: Failed to register a ServiceWorker for scope ('http://localhost:4321/') with script ('http://localhost:4321/undefined'): A bad HTTP response code (404) was received when fetching the script.
(Примечание: я использую локальный сервер Nginxчтобы проверить мою производственную сборку)
Я использую Workbox Webpack GenerateSW следующим образом:
new WorkboxPlugin.GenerateSW({
clientsClaim: true,
skipWaiting: false
})
И я подтвердил, что после сборки сценарий работника службы (service-worker.js)сгенерировано и находится в папке dist.
Я использую плагин Workbox-Window для регистрации вышеупомянутого сценария рабочего сервиса:
import { Workbox } from 'workbox-window'
if ('serviceWorker' in navigator) {
const wb = new Workbox('/service-worker.js') // Note: I also tried without the bar and with path './service-worker.js' and didnt work
wb.register()
}
Я предполагаю, что проблема не связана с фактомЯ использую Nginx для тестирования сборки prod, не связанной с URL-адресом или путем сценария рабочего сервиса, предоставляемого конструктору Workbox, потому что, используя Web-API ServiceWorker вместо API окна Workbox, он работает нормально:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js') // THIS WORKS!!!
}
Почему при точно таких же условиях регистрация работника службы завершается неудачно с помощью API окна Workbox? Откуда это undefined
, которое вы можете увидеть в журналах ошибок, откуда ??? 1024 *
* Редактировать * Я открыл проблему в репозитории Workbox GitHub. Вы можете найти это здесь .