Добавьте дополнительные функции 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
, это не требует eject
ing первый.
есть некоторая информация об этом подходе здесь, и общая идея заключается в изменении вашего 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
при установке по умолчанию один
вы можете найти подробные изменения файлов здесь.