Добавьте дополнительные функции service-worker с помощью create-react-app
таким образом, create-react-app включает в себя функциональность service worker по умолчанию, что прекрасно - все мои статические активы кэшируются для автономного использования из коробки. Круто, но теперь я хочу пойти немного дальше и использовать indexedDB для кэширования динамического контента.
проблема в том, что нет сервисного работника.файл js для изменения. Он генерируется в процессе сборки.
есть ли способ добавить дополнительную логику без извлечения create-react-app или повторного выполнения все хорошее статическое кэширование?
2 ответов
как вы заметили, заблокирована, и логика service worker полностью определена в конфигурации.
если вы не хотите eject но вы хотите некоторую настройку, другой вариант-изменить create-react-app процесс сборки для явного вызова sw-precache командной строки после обычная сборка завершена, перезапись service-worker.js это create-react-app создает по умолчанию. Потому что это включает в себя изменение вашего местного package.json, это не требует ejecting первый.
есть некоторая информация об этом подходе здесь, и общая идея заключается в изменении вашего npm скрипты выглядят примерно так:
"build": "react-scripts build && sw-precache --config=sw-precache-config.js"
С sw-precache-config.js настроить исходя из ваших потребностей, но в том числе
swFilePath: './build/service-worker.js'
для обеспечения того, чтобы встроенный service-worker.js перезаписывается.
у меня была такая же проблема и не делая eject, Я мог бы заменить значение по умолчанию service-worker С workbox - сгенерированный для добавления веб-фонтов кэширования времени выполнения, вызовов api и т. д.
- установить
workbox-build - готовить
src/sw-template.jsдобавить кодregisterRouteзвонки - готовить
/build-sw.jsчтобы скопировать файл workbox в папку "build" иinjectManifest - изменить
package.jsonскрипты для запуска вышеbuild-sw.js - изменить
src/registerServiceWorker.jsпри установке по умолчанию один
вы можете найти подробные изменения файлов здесь.