I have an Angular 14 SPA hosted on Firebase and I have the following issue:
The users are using the cached version (previous version) instead of the latest version when accessing the application (website).
Steps to reproduce the issue:
- User opens application - let's say
v1.0.0
- I deploy a new version - let's say
v2.0.0
- User opens application again and he is using
v1.0.0
(from cache I guess) (if the user refreshes the page,v2.0.0
is loaded)
Expected behavior:
- User opens application - let's say
v1.0.0
- I deploy a new version - let's say
v2.0.0
- User opens application again and he is using
v2.0.0
(no refresh needed)
Initially, I thought the PWA service worker causes the issue.
I understood that the PWA service worker gets the new version after the application is opened (similar to a mobile application) and updates the application on the next lunch - and that I could show a dialog to notify the new version (based on swUpdate.available.subscribe
- https://stackoverflow.com/a/66905807) and after the user's confirmation (or even without his confirmation) to force the reload using location.reload()
but I didn't want to take this approach so I decide to remove PWA.
The application is now just a SPA (no PWA) and I made sure the service worker is unregistered as shown below (also checked in the browser and the application doesn't have service worker, manifest, etc) but I still have the same issue.
if ("caches" in window) {
caches.keys().then(function (keyList) {
return Promise.all(
keyList.map(function (key) {
return caches.delete(key);
})
);
});
}
if (window.navigator && navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) {
registration.unregister();
}
});
}
This is my build
script:
{
...
"build": "ng build --configuration production --aot --output-hashing=all"
...
}