Angular Service Worker (Application hors ligne)

Daouda Diallo
Code d'Ivoire
Published in
2 min readApr 12, 2019

Nous verrons comment permettre à notre application web Angular de fonctionner en mode hors ligne.

Un service worker est un script spécial qui s’exécute en arrière-plan dans le navigateur et qui gère les requêtes réseau à une origine donnée. Il a été installé au premier chargement par une application et reste sur la machine (l’ appareil de l’utilisateur). Il est activé par le navigateur quand une page de son origine est chargée et a la possibilité de répondre aux requêtes HTTP pendant le chargement de la page.

Ajouter un service worker à notre application

Pour commencer, Nous allons créer un projet avec angular cli.

ng new serviceWorking-example

cd serviceWorking-example

Maintenant nous devons informer angular cli qu’on veut utiliser service worker :

ng set apps.0.serviceWorker=true

Si vous n’avez pas encore installé @angular/service-worker, vous aurez ce message :

Your project is configured with serviceWorker = true, but @angular/service-worker is not installed. Run

npm install — save-dev @angular/service-worker and try again, or run ng set

apps.0.serviceWorker=false in your .angular-cli.json.

Vérifier dans .angular-cli.json, normalement vous devez avoir “serviceWorker”: true

Quand il est à true, les builds de productions seront généré avec service worker.

Un fichier ngsw-manisfest.json sera généré dans le dossier dist/ et à la base du projet. Un script sera aussi ajouté à index.html pour charger le service worker.

Maintenant si on build notre application en mode production avec ng build prod et qu’on vérifie dans le dossier dist/.

On y verra 3 nouveaux fichiers :

  • worker-basic.min.js
  • sw-register.HASH.bundle.js
  • ngsw-manifest.json

Aussi, le script sw-register sera ajouté à l’index.html.

Recharger la page dans notre navigateur et ouvrir DEVELOPER TOOLS. Aller à Application -> Serice Workers

Maintenant notre application doit être chargée plus rapidement et fonctionner en mode hors ligne.

Ensuite si vous activez le mode hors ligne dans la console de CHROME, vous devrez voir notre application à l’adresse http://localhost:4200/index.html qui marche sans internet.

Mais nous aurons un problème avec l’adresse http://localhost:4200, le contenu rendu est celui définir dans le fichier manifest.

Ajoutons ce code au fichier ngsw-manifest.json :

Ensuite on build à nouveau notre application, quand nous allons sur http://localhost:4200, on sera redirigé sur http://localhost:4200/index.html.

--

--

Daouda Diallo
Code d'Ivoire

Software Engineer/ Objectif Libre Developer | Co-founder and CTO of @legafrik. I game e-sport, football, and open source #js #typescript #angular #node