Ошибка регистрации служебного скрипта в производственной сборке - PullRequest
0 голосов
/ 07 ноября 2019

Я использую плагин 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. Вы можете найти это здесь .

...