PWA con Ionic3 y Workbox en 2 patadas.
En 2 sencillos pasos vamos a crear una aplicación web progresiva partiendo de un proyecto en ionic 3. Usaremos Workbox ya que ofrece muchas posibilidades.
Para este artículo vamos a partir de un proyecto de ionic 3 ya creado. Puedes crearte uno facilmente con ionic-cli:
ionic start ionic3-pwa-workbox blank
Primera patada: Activar el service worker
Para este paso vamos al fichero ./src/index.html
y descomentamos el siguiente código:
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js')
.then(() => console.log('service worker installed'))
.catch(err => console.error('Error', err));
}
</script>
Desde este momento ya tenemos el service worker activo con lo que ciertas rutas estarán cacheadas. Podemos verlo si lanzamos ìonic serve
y vamos a la consola:
Segunda patada: usar Workbox
primero vamos a instalar workbox con npm:
npm i workbox-sw --save
Y ahora vamos a indicar a ionic que nos copie este fichero al hacer el build extendiendo la configuración por defecto. Crearemos un fichero al que lamaremos /config/copy.config.js
con el siguiente contenido:
module.exports = {
copyWorkboxSw: {
src: ['/node_modules/workbox-sw/build/workbox-sw.js'],
dest: ''
}
}
Indicaremos en package.json
el siguiente codigo para indicarle a ionic que tambien use la configuración que hemos creado:
"config": {
"ionic_copy": "./config/copy.config.js"
}
Y modificaremos el service worker creado por ionic en nuestro proyecto por uno usando Workbox:
'use strict';
importScripts('./build/workbox-sw.js');
/*
This is our code to cache static files.
*/
self.workbox.precaching.precacheAndRoute([
'./build/main.js',
'./build/vendor.js',
'./build/main.css',
'./build/polyfills.js',
'index.html',
'manifest.json'
]
);
Para terminar: patapum pariba y test con Lighthouse.
Para este artículo voy a usar gh-pages pero cualquier otro hosting que ofrezcan https sería valido.
Mediante los siguientes comandos construiremos la aplicación para subirla a producción.
ionic cordova platform add browser
ionic cordova build browser --prod
Ahora tendremos nuestra aplicación en ./platforms/browser/www/
asi que subiremos este directorio a nuestra rama gh-pages (recuerda usar tu nombre de usuario y tu repositorio en github):
cd platforms/browser/www/
git init
git remote add origin https://github.com/frnd/ionic3-pwa-workbox.git
git add --all
git commit -m "production build"
git push origin master:gh-pages -f
Nuestra PWA está disponible en https://frnd.github.io/ionic3-pwa-workbox/. En la siguiente captura puedes ver los resultados que da Lighthouse.
Codigo fuente y enlaces.
Puedes ver el codigo fuente de este proyecto en github y acceder al ejemplo ionic3-pwa-workbox. Mas información de interés:
Para problemas o comentarios, puedes crear un tema en el github del proyecto