UNPKG

sw-precache-cra

Version:

customize your service worker in create react app without `npm run eject`

121 lines (83 loc) • 3.37 kB
# sw-precache-cra šŸ‘· Customize your service worker in create react app without `npm run eject` ## The Problem Create-react-app provides built-in `service-worker.js` but _when you want to extend it_ \ (e.g. to cache REST API response) you need to do `npm run eject` and maintain more configs. Sometimes we just want to enjoy customization but keep those big configs unchanged. \ This cli tool helps you achieve this with ease. ## Demo https://sw-precache-cra-demo-cra-contributors.netlify.com/ A page caching GitHub API response with [one simple config][sw-config]. Done in [4 steps][examples-sw-precache-cra] ## Extend Service Worker in Create React App in 2 steps 1. `$ npm i -S sw-precache-cra` 2. Edit the `build` script in `package.json` There are 2 examples: šŸ’” If you want your service worker _cache API response with url `/messages`_: concat the build script ```diff "scripts": { "start": "react-scripts start", - "build": "react-scripts build", + "build": "react-scripts build && sw-precache-cra --config sw-config.js", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" } ``` with one additional js module having any [`sw-precache` configs][sw-precache-configs]: ```js // sw-config.js module.exports = { runtimeCaching: [ { urlPattern: '/messages', handler: 'networkFirst', }, ], }; ``` šŸŽ‰ You've got custom `build/service-worker.js` after `npm run build` --- šŸ’” If you want to have _Non minified_ `build/service-workder.js` you can do this: ```diff "scripts": { "start": "react-scripts start", - "build": "react-scripts build", + "build": "react-scripts build && sw-precache-cra --no-minify", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" } ``` šŸŽ‰ You've got Un-minified `build/service-worker.js` after `npm run build` ## Other API ```bash $ sw-precache-cra --list-config # Print current config for sw-precache # If you do not specify a config file, default config by CRA is printed # { swFilePath: './build/service-worker.js', cacheId: 'sw-precache-webpack-plugin', dontCacheBustUrlsMatching: /\.\w{8}\./, navigateFallback: '/index.html', navigateFallbackWhitelist: [ /^(?!\/__).*/ ], staticFileGlobsIgnorePatterns: [ /\.map$/, /asset-manifest\.json$/ ], staticFileGlobs: [ './build/**/**.html', './build/static/js/*.js', './build/static/css/*.css', './build/static/media/**' ], stripPrefix: './build' } ``` For more APIs please do `sw-precache-cra --help` ## Reference - [Add more service-worker functionality with create-react-app ](https://stackoverflow.com/questions/47636757/add-more-service-worker-functionality-with-create-react-app) - [sw-precache README][sw-precache-configs] - [facebook/create-react-app issue #3132](https://github.com/facebook/create-react-app/issues/3132#issuecomment-330610440) - [bbhlondon/cra-append-sw ](https://github.com/bbhlondon/cra-append-sw) ## License [MIT License][mit-license] [mit-license]: https://liuderchi.mit-license.org/ "mit-license" [sw-precache-configs]: https://github.com/GoogleChromeLabs/sw-precache#options-parameter "sw-precache-config" [sw-config]: https://github.com/liuderchi/sw-precache-cra/blob/examples/examples/cra-contributors/sw-config.js [examples-sw-precache-cra]: https://github.com/liuderchi/sw-precache-cra/commits/examples