Este documento explica como habilitar el soporte de Trabajadores de Servicio Angular en proyectos que creaste con Angular CLI. Luego usa un ejemplo simple para mostrarle un trabajador de servicio en acción demostrando la carga y almacenamiento en caché básico.
Una comprensión básica de la información en Introduction to Angular service workers.
Para configurar un trabajador de servicio Angular en su proyecto, use el comando CLI ng add @angular/pwa
. Se encarga de configurar su aplicación para usar trabajador de servicio agregando el paquete service-worker
junto con la preparación de los archivos de soporte necesarios.
ng add @angular/pwa --project *project-name*
El anterior comando completa las siguientes accciones:
- Agrega el paquete
@angular/service-worker
en su proyecto. - Habilita el soporte de trabajador de servicio en la interfaz de línea de comandos.
- importa y registra el trabajador de servicio en el módulo de la aplicación.
- Actualiza el archivo
index.html
:- Incluye un enlace para agregar el archivo
manifest.webmanifest
. - Agrega metaetiquetas para
theme-color
.
- Incluye un enlace para agregar el archivo
- Instala archivos de iconos para soportar la aplición web progresiva (PWA) instalada.
- Crea el archivo de configuración de trabajador de servicio llamado
ngsw-config.json
, el cual especifica los comportamientos de almacenamiento en caché y otras configuraciones.
Ahora, crear el proyecto:
ng build --prod
El proyecto CLI está ahora preparado para usar trabajador de servicio de Angular.
Esta sección demuestra un trabajador de servicio en acción, usando una aplicación ejemplo.
Debido a que ng serve
no funciona con trabajador de servicios, debe usar un servidor HTTP separado para probar su proyecto localmente. Puede usar cualquier servidor HTTP. El siguiente ejemplo usa el paquetehttp-server de npm. Para reducir la posibilidad de conflictos y evitar servir contenido obsoleto, pruebe en un puerto dedicado y deshabilite el almacenamiento en caché.
Para servir el directorio que contiene sus archivos web con http-server
, ejecute el siguiente comando:
http-server -p 8080 -c-1 dist/<project-name>
Con el servidor en ejecución, puede apuntar su navegador a http://localhost:8080/. Su aplicación debería cargarse normalmente.
Consejo Cuando pruebe trabajador de servicios de Angular, es una buena idea usar una ventana privada o de incognito en su navegador para asegurarse de que el trabajador de servicio no termine leyendo de un estado sobrante anterior, el cual puede causar un comportamiento inesperado.
*Nota:
Si no está utilizando HTTPS, el trabajador de servicio solo se registrará cuando acceda a la aplicación en localhost
.
Para simular un problema de red, deshabilite la interacción de red para su aplicación: En Chrome:
- Seleccione Herramientas > Herramientas de desarrollador (desde el menu de Chrome ubicado en la esquina superior derecha).
- Vaya a pestaña red.
- Compruebe que caja esté desactivada
Ahora la aplicación no tiene acceso a la interacción de red.
Para aplicaciones que no usen trabajador de servicio de Angular, la actualización ahora mostraría la página de desconectado de Chrome que dice "No hay conexión a internet".
Con la incorporación de un trabajador de servicio Angular, el comportamiento de la aplicación cambia. En una actualización, la página carga normarmente.
Si observa la pestaña de red, puede verificar que trabajador de servicio esté activo.
Note que debajo de la columna "Tamaño", el estado de las solicitudes es (from ServiceWorker)
. Esto significa que los recursos no estan siendo cargados desde la red. En su lugar estan siendo cargados desde la memoria caché del service worker.
Note que todos los archivos que el navegador necesita para procesar esta aplicación son almacenados en caché. La configuración estándar ngsw-config.json
está preparada para almacenar los recursos específicos usados por el CLI:
index.html
.favicon.ico
.- Construir artefactos (paquetes JS y CSS).
- Cualquier cosa bajo
assets
. - Imagenes y fuentes directamente bajo el
outputPath
configurado (por defecto./dist/<project-name>/
) oresourcesOutputPath
. Mireng build
para más información acerca de estas opciones.
-
El
ngsw-config.json
generado incluye una lista limitada de fuentes almacenables en caché y extensiones de imágenes. En algunos casos podrías querer modificar el patrón global para adaptarlo a sus necesidades. -
Si las rutas
resourcesOutputPath
oassets
son modificadas después de la generación del archivo de configuración, necesita cambiar las rutas manualmente enngsw-config.json
.
Ahora que ha visto como trabajadores de servicio alamcenan su aplicación, el próximo paso es entender como funcionan las actualizaciones.
-
Si esta probando en una ventana de incónito, abra una segunda pestaña en blanco. Esto mantendrá vivo el incógnito y el estado de cache durante la prueba.
-
Cierre la pestaña de la aplicación, pero no la ventana. Este también debería cerrar las herramientas de desarrollador.
-
Apague
http-server
. -
A continuación, realice un cambio en la aplicación, y observe como el trabajador de servicio instala la actualización.
-
Abra
src/app/app.component.html
para editarlo. -
Cambie el texto
Welcome to {{title}}!
aBienvenue à {{title}}!
. -
Cree y ejecute el servidor nuevamente.
ng build --prod
http-server -p 8080 -c-1 dist/<project-name>
Ahora observe como el navegador y el trabajador de servicio manejan la aplicación actulizada.
- Abra http://localhost:8080 nuevamente en la misma ventana. Qué sucede?
¿Qué salio mal? Nada en realidad. El trabajador de servicio de Angular está haciendo este trabajo y entregando la versión de la aplicación que tiene instalada aunque hay una actualización disponible. En aras de la velocidad, el trabajador de servicio no espera para verificar actualizaciones antes de servir la aplicación que tiene almacenado en caché.
Si observa los registros de http-server
, puede ver el trabajador de servicio solicitando /ngsw.json
. Así es como el trabajador de servicio busca actualizaciones.
- Recargue la página.
El trabajador de servicio instaló la versión actualizada de su aplicación en segundo plano, y la próxima vez que la página es carguada o recargada, el trabajador de servicio cambia a la última versión.
También le puede interesar lo siguiente: