Hoy voy a enseñarte cómo convertir cualquier aplicación web en una PWA o Progressive Web App.

Tú puedes programar en cualquier lenguaje y Framework, ya que las PWA no están atadas a algo más allá de JavaScript.

Así que mientras tu app conste de archivos del lado del cliente, podrás convertirla en PWA. Y con estos archivos me refiero a CSS, JS, HTML, imágenes, etcétera.

Te repito que para crear una PWA no necesitas usar un framework específico, así que puedes usar JavaScript puro, Angular, Vue, React, jQuery (bueno, jQuery no, ya es obsoleto) y cualquier otro que genere JavaScript al final.

¿Qué son las PWA?

Si quieres leer teoría, ve a la Wikipedia o busca en Google.

Yo uso las PWA porque se pueden instalar en el dispositivo como si fueran nativas, permiten agregar nuestros archivos al caché y básicamente nos permiten hacer apps “nativas” desde la web usando cualquier framework.

De este modo le das al usuario la posibilidad de instalar tu app y trabajar fuera de línea, así que él puede visitar tu app web una sola vez e instalar la app nativamente en Android, iOS o en la computadora con Windows, MacOS o Linux.

Limitaciones

Veo las PWA como un estándar, y no como una magia. Básicamente una Progressive Web App te permitirá, entre otras cosas, trabajar sin conexión e instalar tu webapp como si fuera nativa; pero no es magia.

Con esto me refiero a que si quieres trabajar sin conexión tú debes implementar esa lógica. Si usas un lenguaje del servidor o una API y el usuario no tiene internet, obviamente no va a poder usar tu app aunque la misma sea una PWA.

Las PWA solo guardan en caché los assets, scripts, estilos, etcétera; pero no guardan una porción de internet.

Además, no todas las apps usan conexión a internet o guardan datos, pero si quieres trabajar sin conexión puedes usar Firebase, PouchDB o localStorage.

Generando manifesto

Hasta este punto y para los siguientes voy a suponer que ya tienes tu app final que solo consta de archivos web del lado del cliente.

Bien, comenzamos creando el manifiesto y colocándolo junto a tus assets para luego importarlo en el HTML. Siéntete libre de modificarlo y adaptarlo a tus necesidades:

En este caso icono-512 es la imagen del tamaño 512×512. Se recomienda que las imágenes sean cuadradas. Obviamente el src puede cambiar dependiendo de tu proyecto. Puedes agregar varias imágenes para distintos tamaños.

Después importamos el manifiesto en el index.html, obviamente si tú cambiaste la ruta entonces cambia lo necesario:

Luego vamos a regresar al index.html a registrar el Service Worker, pero primero debemos crearlo.

Instalando workbox

Workbox es una herramienta que te va a permitir generar el Service Worker automáticamente. Tú puedes generarlo a mano, pero yo recomiendo siempre usar herramientas de automatización.

No es nada difícil, ya lo verás. Solo necesitas NPM y Node. Una vez que cuentes con Node y NPM ejecuta lo siguiente para instalarlo:

npm install workbox-cli --global

Y espera a que se instale. Luego de eso, reinicia todas las terminales que tengas abiertas. Por cierto, para los siguientes pasos voy a ejecutar los comandos en la ubicación donde tengo mi proyecto.

Generando archivo de configuración para service worker

Ya tenemos workbox, ahora vamos a generar un archivo de configuración. Este archivo le dice a workbox cómo debe crear nuestro service worker. Para ello vamos a invocar un asistente.

En mi caso tengo mi proyecto con la CLI de Vue, y al compilar me genera el JS, CSS y HTML en la carpeta dist, por ello es que en los siguientes pasos le diré al asistente que mi proyecto está en dist.

Si tú tienes otra configuración o carpeta, entonces muévete a esa ruta antes de seguir los pasos. Pero bueno, comenzamos ejecutando:

workbox wizard

Elegimos el directorio, en mi caso es dist. Luego marcamos los archivos que queremos cachear, podemos marcar y desmarcar con la tecla de espacio.

Yo dejé todas marcadas y presioné Enter. Cuando me preguntó en dónde guardar el archivo de service-worker acepté la ruta, que fue en la carpeta dist/sw.js.

Nota: una cosa es el archivo de configuración, y otra cosa es el service worker. Workbox lee el archivo de configuración y genera el service worker.

Por otro lado, las configuraciones las guardé en la carpeta padre de dist, tal y como el asistente me lo sugirió.

Cuando me preguntó si quería eso de los parámetros de búsqueda le di N. A ti te puede preguntar otras cosas en el futuro, solo tienes que leer y responder. Luego me dijo:

Llegados a este punto ya podemos generar nuestro service worker.

Generando service worker

Tal como lo dijo la salida, ahora solo debemos ejecutar: workbox generateSW workbox-config.js. A ti te puede dar otra salida obviamente.

Con esto le indicamos a workbox que genere el service worker tomando en cuenta el archivo workbox-config.js, que ya tiene los ajustes que pusimos anteriormente y que podemos modificar a nuestro gusto.

Nota: al ejecutarlo, me generó 4 archivos, pero los .map no son necesarios. Así que solo toma los 2 js, que son sw.js y workbox-letras-y-números.js

Siempre que ejecutes el comando, se va a crear el service worker. Es recomendable ejecutarlo siempre que hagas cambios o cambies archivos.

En mi caso ejecuto npm run build para compilar mi app, misma que me genera el directorio dist. E inmediatamente después de eso ejecuto workbox generateSW workbox-config.js para que genere el service worker.

Nota: cada que hagas un cambio debes generar el ServiceWorker de nuevo. Presta atención; dije Service Worker, y no archivo de configuración, pues el archivo de configuración se debe generar una vez por proyecto.

Volviendo al index.html

Ya tenemos nuestro ServiceWorker que en mi caso se ve así:

También es importante copiar el archivo workbox-letras-y-números.js que Workbox generó, y este archivo debe estar en el mismo directorio que el sw.js.

Vamos al index.html, en el head registramos el service worker (recuerda que igualmente ahí debemos importar el manifiesto):

Obviamente sw.js está en la misma carpeta que mi index.html, así que por eso lo registro de esa manera. Si el tuyo está en otra ubicación o tiene otro nombre cambia lo que sea necesario.

Verificando PWA

Entonces ya tenemos toda nuestra app, el manifiesto y el service worker. En mi caso se ve así:

Archivos para publicar Progressive Web App

Archivos para publicar Progressive Web App

Sí, ya sé que se me pasaron los .map pero en un momento los eliminaré. El punto es que esa es mi webapp completa, ya lista para enviarla a producción.

Es momento de subirla a un servidor HTTPS, y si no tienes ninguno puedes usar las Github pages, ya que al final solo estamos usando archivos del lado del cliente.

Una vez subida navega hasta tu app web recién publicada, abre la consola de depuración y ve a Application > Manifest, verás que tu manifiesto es válido y se debe ver algo así:

Verificar manifiesto de PWA

Verificar manifiesto de PWA

Luego en Service Workers también podrás ver que el archivo generador por workbox ha funcionado:

Service worker en Progressive Web App

Service worker en Progressive Web App

Llegados a este punto ya puedes instalar tu web app progresiva como si fuera nativa, ya sea en la computadora o en un móvil. Así se ve en mi teléfono con Android, lista para ser instalada:

Instalar PWA como nativa en Android desde Google Chrome

Instalar PWA como nativa en Android desde Google Chrome

Además, si el usuario visita nuestra app progresiva varias veces, aparece la sugerencia para instalar en la parte inferior. Y así es como podemos crear una PWA con nuestros archivos web, sin importar el framework o tecnologías usadas.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 3,194 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: