因此,create-react-app包含服务工作者功能by default,这很可爱 - 我的所有静态资产都会被缓存以供开箱即用的离线使用。很酷,但现在我想更进一步,并使用indexedDB来缓存一些动态内容。
问题是,没有要修改的service-worker.js文件。它在构建过程中生成。
有没有办法在不弹出create-react-app或重做所有漂亮的静态缓存内容的情况下添加额外的逻辑?
答案 0 :(得分:12)
正如您所看到的,{2=[2, 5, 23, 56, 77], 1=[1, 22, 43, 67], 0=[3, 6, 9, 87]}
的配置被锁定,服务工作者逻辑完全在配置中定义。
如果你不想create-react-app
但你想要一些自定义,另一种选择是修改eject
构建过程以在create-react-app CLI >正常构建已完成,覆盖sw-precache
默认生成的service-worker.js
。因为这涉及修改本地create-react-app
,所以首先不需要package.json
。
有关此方法的一些信息here,一般的想法是修改您的eject
脚本,如下所示:
npm
根据您的需求"build": "react-scripts build && sw-precache --config=sw-precache-config.js"
configured,但包括
sw-precache-config.js
确保覆盖内置swFilePath: './build/service-worker.js'
。
答案 1 :(得分:7)
我遇到了同样的问题而没有eject
,我可以用service-worker
替换默认的workbox
- 生成一个以添加运行时缓存webfonts,api调用等。
workbox-build
src/sw-template.js
以添加registerRoute
来电/build-sw.js
将工作箱文件复制到'build'文件夹和injectManifest
package.json
脚本以便在build-sw.js
src/registerServiceWorker.js
以替换默认值