A chaque mise en route de l'application, la dernière version est téléchargée et ce même si une précédente exécution avait déjà téléchargé la nouvelle version.
Le même manège se déroule à chaque nouvelle exécution :
Une fois le téléchargement effectué, un appui sur [F5] permet d'avoir la dernière version :
Faut-il explicitement exécuter une opération pour que la nouvelle version téléchargée occupe le cache du ServiceWorker ?
Question annexe (mais qui peut éventuellement résoudre le problème) : il faudrait proposer de redémarrer l'application avec la nouvelle version parce que devoir appuyer sur [F5] n'est pas trivial et est de toute façon impossible sur smartphone. La documentation d'Angular propose une solution : https://v10.angular.io/guide/service-worker-communications#forcing-update-activation
Edited
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related.
Learn more.
lorsque le service worker interroge le serveur pour savoir s'il y a une mise à jour, il fait une requête du style ngsw.json?ngsw-cache-bust=0.9851453445660161
après avoir ouvert l'appli une fois, s'il y a une MAJ dispo, il a une erreur ReferenceError: Cannot access 'o' before initialization dans la console et un message snackbar indiquant qu'une MAJ est en cours de téléchargement mais pas de snackbar indiquant que la MAJ est prête à être installée (2)
à partir de (2), F5 fait apparaître un nouveau n° de version, pas d'erreur en console ni de snackbar. Les F5 suivants ne changent rien : nouvelle version et pas de message console/snackbar. Si on relance l'appli, on a la nouvelle version et pas de message. Si par la suite on fait ctrl-F5, on a la nouvelle version et le service worker ne fait pas de requête (il considère que c'est inutile car il a déjà ce qui vient directement du serveur)
à partir de (1), s'il n'y a pas de MAJ dispo, pas de message d'erreur (ni de snackbar, ce qui est normal) (3)
de (3), F5 se comporte de cette façon : requête ngsw.json?..., la version ne bouge pas, aucun message
de (3), ctrl-F5 ne provoque pas de requête ngsw.json?... et aucun message (on pouvait s'y attendre)
Après installation de l'appli PWA :
on retrouve bien la version du serveur. La requête de demande de MAJ est lancée au bout de quelques secondes, ne rapporte pas de changement et ne provoque aucun message. F5 fait de même. Ctrl-F5 se comporte de la même façon que précédemment.
si une MAJ est dispo, même chose qu'auparavant : requête, message d'erreur dans la console. Si on arrête l'appli, coupe le serveur et relance l'appli, la nouvelle version est affichée. Le cache semble mis à jour malgré l'erreur. Mystère...
si on coupe l'accès au serveur, l'appli se lance correctement. F5 se comporte de la même façon (mais la requête échoue, normal). Ctrl-F5 affiche une page vide ("Ce site est inaccessible") puis l'appli est rechargée (à partir du cache, mais lequel ?).
La question qui se pose c'est : qu'est ce qui provoque le message d'erreur ? (à part le fait qu'une MAJ soit dispo...). Fait intéressant, le message peut varier : on peut avoir aussi ReferenceError: Cannot access 'a' before initialization (noter le 'a' à la place du o).
By Grand Francois on 2023-02-17T16:22:37 (imported from GitLab)
Le problème semble venir de la valeur de base href (index.html) non cohérent avec le fichier ngsw.json (généré à la compilation) : le fichier index.html était modifié manuellement avec sed lors du déploiement.
La solution consiste à utiliser l'option --base-ref lors de ng build (cf. package.json).
By Grand Francois on 2023-03-03T08:21:36 (imported from GitLab)