How to update Reactjs based PWA to the new version? How to update Reactjs based PWA to the new version? reactjs reactjs

How to update Reactjs based PWA to the new version?


I finally resolved my problem after two days. The problem was in service-worker file. I had to add event listener if page reloaded and server files had changes so it will update the files.

So I added this section to serviceWorker.js in register function:

window.addEventListener('activate', function(event) {      event.waitUntil(          caches.keys().then(function(cacheNames) {              return Promise.all(                  cacheNames.filter(function(cacheName) {                      // Return true if you want to remove this cache,                      // but remember that caches are shared across                      // the whole origin                  }).map(function(cacheName) {                      return caches.delete(cacheName);                  })              );          })      );    });

Just don't forget. This listener call when page is reload. So I make API service to check there is new version or not. if there is new version , It have to reload the page to get new files.

this question was so helpful: How to clear cache of service worker?

Update (December.1.2019):

I found better way to update new PWA. Actually that way (above) not work on iOS 13. So I decide check update by API. PWA Send current version to API and if there is new version released , in PWA we should delete all caches:

caches.keys().then(function(names) {    for (let name of names)        caches.delete(name);});

And after that reload application:

window.location.href = "./";

After reload because there is no cache to load pages on offline mode, so PWA will check server and get new version.


this work for me:src/index.tsx

// If you want your app to work offline and load faster, you can change// unregister() to register() below. Note this comes with some pitfalls.// Learn more about service workers: https://cra.link/PWAserviceWorkerRegistration.register({  onUpdate: (e) => {    const { waiting: { postMessage = null } = {} as any, update } = e || {};    if (postMessage) {      postMessage({ type: 'SKIP_WAITING' });    }    update().then(() => {      window.location.reload();    });  },});