そのため、create-react-appにはService Worker機能 デフォルト が含まれています。これはすばらしいことです。静的アセットはすべて、すぐにオフラインで使用できるようにキャッシュされます。かっこいいですが、今度は少し先に進み、indexedDBを使用して動的コンテンツをキャッシュしたいと思います。
問題は、変更するservice-worker.jsファイルがないことです。ビルドプロセス中に生成されます。
Create-react-appをイジェクトしたり、Nice静的キャッシングのすべてをやり直したりせずに、追加のロジックを追加する方法はありますか?
ご覧のとおり、create-react-app
の構成はロックダウンされており、Service Workerロジックは完全に構成で定義されています。
eject
を使用したくないがカスタマイズが必要な場合は、create-react-app
ビルドプロセスを変更してsw-precache
CLIを明示的に呼び出すようにすることもできます after通常のビルドが完了し、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
を使用 configured ニーズに基づきますが、
swFilePath: './build/service-worker.js'
組み込みservice-worker.js
が確実に上書きされるようにします。
同じ問題があり、eject
を実行せずに、デフォルトのservice-worker
をworkbox
で生成されたものに置き換えて、ランタイムキャッシングWebフォント、API呼び出しなどを追加できました。
workbox-build
registerRoute
呼び出しを追加するためにsrc/sw-template.js
を準備します/build-sw.js
を準備し、injectManifest
package.json
スクリプトを変更するbuild-sw.js
src/registerServiceWorker.js
を変更してデフォルトのものを置き換える詳細なファイルの変更はこちら です。