简体   繁体   中英

Not getting service worker with create-react-app

lately, I have create two react application and in both of them the service worker is not present instead a new file is generated ie 'reportWebVitals.js'. Here is my folder structure of src after creating new app. 文件结构

Also, if we check on running the app, the browser says that 'No matching service worker detected'

Thanks @jonrsharpe So, CRA does not give support for service worker directly with default installation command as developer may not be making the application as PWA. So, they decided to keep it optional. Like me, if you anyone else want to install service worker while creating a new app, Prefer:

npx create-react-app my-app --template cra-template-pwa

instead of default npx create-react-app my-app . 在此处输入图像描述 Hence, for more yo can refer tohttps://create-react-app.dev/docs/making-a-progressive-web-app/

If you have already existing project and you want to migrate to the new versions of CRA, you can follow this steps:

1 Create somewhere on your computer a new CRA with the service worker template:

npx create-react-app my-app --template cra-template-pwa

2 Copy the service-worker.js from the new created app into your src directory

3 Copy the "workbox-*" dependencies from the package.json into your package.json dependencies

4 (Optional) If you want web-vitals, copy the web-vitals dependency from package.json into your package.json

and don't forget to run again 'yarn install' or 'npm install'

Thats it

run this command "npx create-react-app your-app-name --template cra-template-pwa" instead of "npx create-react-app your-app-name"

you need to run this command

npx create-react-app your-app-name --template cra-template-pwa

instead of

npx create-react-app your-app-name

Another workaround if you have an already exiting react project without the template:

Go to your index.html file in public folder and add a <script> tag there and you can register the service worker from your <script> tag in index.html using:

if ("serviceWorker" in navigator) {
    navigator.serviceWorker.register("/serviceworker.js")
        .then(e => console.log("Service worker registered", e))
        .catch(e => console.log("service worker failed", e));
}

this way you can cache your public icon files and images.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM