Angular 6. PWA M贸dulos de carga lenta. Despliegue autom谩tico en Firebase

Angular 6 permite, literalmente, en unos pocos comandos crear la base para la aplicaci贸n web progresiva (PWA), crear un dise帽o para p谩ginas de navegaci贸n, tablas, panel de control.


Necesitamos una versi贸n angular-cli no inferior a 6.0.0, as铆 que verifique la versi贸n del paquete instalado:


ng --version 

y si es necesario, instale la 煤ltima versi贸n:


 npm i -g @angular/cli 

Hacemos todo esto, ya que existen diferencias en la estructura de los proyectos creados por las versiones angular-cli 6 y los proyectos creados por versiones anteriores. Tambi茅n hay diferencias en la funcionalidad. Solo sobre algunas de estas caracter铆sticas de este art铆culo.


Por lo tanto, crearemos un proyecto t铆pico de inmediato con la funcionalidad de enrutamiento, ya que tambi茅n est谩 previsto implementar una demostraci贸n de las capacidades de los m贸dulos de carga diferida:


 ng new angular-pwa-ci --routing 

Para que sea m谩s conveniente rastrear los cambios que ocurrir谩n con el proyecto, haremos la primera confirmaci贸n.


 git init git add . git commit -m "Initial commit" 

El siguiente equipo convertir谩 nuestro proyecto en una aplicaci贸n web progresiva (PWA)


 ng add @angular/pwa --project "angular-pwa-ci" 

La emisi贸n de los resultados del comando contiene lo siguiente:


Encabezado de spoiler
 Installed packages for tooling via yarn. CREATE ngsw-config.json (392 bytes) CREATE src/assets/icons/icon-128x128.png (1253 bytes) CREATE src/assets/icons/icon-144x144.png (1394 bytes) CREATE src/assets/icons/icon-152x152.png (1427 bytes) CREATE src/assets/icons/icon-192x192.png (1790 bytes) CREATE src/assets/icons/icon-384x384.png (3557 bytes) CREATE src/assets/icons/icon-512x512.png (5008 bytes) CREATE src/assets/icons/icon-72x72.png (792 bytes) CREATE src/assets/icons/icon-96x96.png (958 bytes) CREATE src/manifest.json (1085 bytes) UPDATE angular.json (3571 bytes) UPDATE package.json (1389 bytes) UPDATE src/app/app.module.ts (605 bytes) UPDATE src/index.html (390 bytes) 

Hagamos otra confirmaci贸n.


Y nos apresuraremos a ver c贸mo nuestra aplicaci贸n ahora cumple con los requisitos para PWA.


Para hacer esto, utilizaremos la utilidad lighthouse , que auditar谩 nuestra aplicaci贸n y generar谩 un informe detallado sobre sus resultados.


Si esta utilidad a煤n no est谩 instalada, puede instalarla con el comando:


 npm i -g lighthouse 

Esta utilidad tambi茅n verificar谩 si nuestra aplicaci贸n muestra contenido cuando JavaScript est谩 deshabilitado en el navegador. Por lo tanto, verificamos la presencia en el archivo src/index.html de la l铆nea


  <noscript>Please enable JavaScript to continue using this application.</noscript> 

Ahora construiremos nuestro proyecto en modo de production , ya que la configuraci贸n predeterminada es para que los trabajadores de servicio trabajen solo en modo de prodaction .


 ng build --prod 

M谩s adelante en este art铆culo, se describir谩 el procedimiento de despliegue autom谩tico para el alojamiento gratuito proporcionado por el servicio firebase, pero ahora para fines de desarrollo, un servidor local ser谩 suficiente para nosotros, que escribiremos ahora. Cree el archivo server.js en la ra铆z del proyecto
Si usa Visual Studio Code como editor, le recomiendo instalar la extensi贸n Angular Essential , que incluye la extensi贸n Angular v6 Snippets , con la que puede comenzar a escribir:


 ex-node- 


De acuerdo con el fragmento propuesto, especifique el puerto y la carpeta deseados en los que se encuentran los archivos para mostrar. Y eso es todo. Puedes ejecutar:


 node server.js 

Nuestra aplicaci贸n est谩 disponible en: http://localhost:8080 y podemos comenzar la auditor铆a


 lighthouse http://localhost:8080 

La utilidad crear谩 un archivo en la ra铆z de nuestro proyecto con el formato localhost_2018-06-08_23-42-21.report.html . 脕bralo en un navegador y vea los resultados de la auditor铆a. No obtuvimos un puntaje del 100%, pero seguimos adelante.


Para organizar el volcado autom谩tico de nuestra aplicaci贸n en firebase, necesitar谩 una cuenta en http://firebase.com .


Despu茅s de eso instale firebase-tools . Lo instalaremos localmente, ya que este paquete se usar谩 en el futuro para el agotamiento autom谩tico.


 npm i -D firebase-tools 

Y para no escribir una ruta larga node_models/firebase-tools/bin/firebase cada vez, tambi茅n la instalaremos globalmente.


 npm i -g firebase-tools 

Inicie sesi贸n en el servicio firebase:


 firebase login 

Este comando har谩 que el navegador predeterminado se abra en la p谩gina donde se le pedir谩 que otorgue permiso a la aplicaci贸n. Estamos de acuerdo Puedes trabajar en eso.


Crear un nuevo proyecto solo es posible en Firebase Console, as铆 que vaya a https://console.firebase.google.com y cree un nuevo proyecto, al que llamaremos angular-pwa-ci .


El siguiente comando crear谩 los archivos de configuraci贸n.


 ./node_modules/firebase-tools/bin/firebase init 

Este comando mostrar谩 un cuadro de di谩logo donde:


  • elija el proyecto angular-pwa-ci ;
  • de servicios que utilizaremos solo hosting ;
  • especificaremos dist/angular-pwa-ci/ carpeta para la sincronizaci贸n;
  • configurar nuestra aplicaci贸n como SPA (redirigir todas las solicitudes a index.html);
  • negarse a reescribir index.html.

Ahora presentaremos nuestra aplicaci贸n para hosting en modo manual


 ./node_modules/firebase-tools/bin/firebase deploy --only hosting 

Al emitir este comando, se indicar谩 la direcci贸n donde estar谩 disponible nuestra aplicaci贸n. Por ejemplo, https://angular-pwa-ci.firebaseapp.com .


Y ahora, una vez m谩s, auditaremos nuestra aplicaci贸n.


 lighthouse https://angular-pwa-ci.firebaseapp.com 


Aqu铆 nuestra aplicaci贸n se ha convertido en PWA 100%.


M贸dulos de carga diferidos


Decoremos un poco nuestra aplicaci贸n. Al mismo tiempo, estamos explorando otra caracter铆stica de angular 6.
Agregue soporte angular / material para nuestro proyecto.


 ng add @angular/material@6.2.1 @angular/cdk 

UPD: Indicamos la versi贸n para angular / material, ya que el 煤ltimo 6.3 arroja un error.


Ahora crea la p谩gina de navegaci贸n de nuestra aplicaci贸n


 ng g @angular/material:material-nav --name=nav -m app 

Es hora de hacer cambios manuales en nuestro c贸digo de proyecto.


 // src/app/app.component.html <app-nav></app-nav> 

  // src/app/nav/nav.component.ts @Component({ - selector: 'nav', + selector: 'app-nav', templateUrl: './nav.component.html', styleUrls: ['./nav.component.css'] }) 

Crear un m贸dulo


 ng gm table --routing 

En el m贸dulo de table creado, cree un componente con marcado y estilos listos.


 ng g @angular/material:material-nav --name=table --flat=table -m table 

  // src/app/app-routing.module.ts -const routes: Routes = []; +const routes: Routes = [ + { + path: 'table', + loadChildren: './table/table.module#TableModule' + }, + { + path: '', + redirectTo: '', + pathMatch: 'full' + } +]; 

  // src/app/table/table-routing.module.ts -const routes: Routes = []; +const routes: Routes = [ + { + path: '', + component: TableComponent + } +]; 

routerLink enlace al routerLink y agregue router-outlet


  // src/app/app.component.html <mat-toolbar color="primary">Menu</mat-toolbar> <mat-nav-list> - <a mat-list-item href="#">Link 1</a> + <a mat-list-item routerLink="/table">Table</a> <a mat-list-item href="#">Link 2</a> <a mat-list-item href="#">Link 3</a> </mat-nav-list> @@ -25,5 +25,6 @@ </button> <span>Application Title</span> </mat-toolbar> + <router-outlet></router-outlet> </mat-sidenav-content> </mat-sidenav-container> 

Despu茅s de eso, ejecute nuestra aplicaci贸n en el modo de desarrollo ng serve . Presta atenci贸n Si estaba en este modo antes, debe reiniciarlo.
Podemos observar que se ha creado un fragmento adicional.
Y en el panel del desarrollador en la pesta帽a de red, veremos que al hacer clic en el enlace, nuestro m贸dulo de tabla se carga din谩micamente.



Creemos un m贸dulo funcional m谩s y un componente con marcado para el tablero


 ng gm dashboard --routing ng g @angular/material:material-dashboard --flat=dashboard --name=dashboard -m dashboard 

Las acciones para cambiar el c贸digo son similares al m贸dulo de tabla.


Como resultado, obtenemos una aplicaci贸n PWA con dos m贸dulos funcionales cargados din谩micamente.
Es hora de pasar a implementar una implementaci贸n autom谩tica de nuestra aplicaci贸n en firebase.


CD para Firebase


Necesitaremos una cuenta en https://travis-ci.org y una cuenta en https://github.com .
angular-pwa-ci repositorio angular-pwa-ci en github y coloquemos el c贸digo de nuestra aplicaci贸n


 git remote add https://github.com/< >/angular-pwa-ci.git git push -u origin master 

Despu茅s de eso, conectaremos nuestro repositorio angular-pws-ci servicio angular-pws-ci . Para hacer esto, en la p谩gina https://travis-ci.org/profile/ haga clic en el bot贸n de sincronizaci贸n, y en la lista con el repositorio conectamos angular-pwa-ci


Para implementar nuestra aplicaci贸n, necesitamos una clave para esto, ejecute el comando


 firebase login:ci 

La emisi贸n de este comando contendr谩 la clave. Copie su valor y agr茅guelo a las variables de entorno travis-ci con el nombre FIREBASE_TOKEN


Queda por agregar el archivo .travis.yml a nuestro proyecto


 language: node_js node_js: - "node" before_script: - npm i -g firebase-tools script: - npm install - npm run build - firebase use --token $FIREBASE_TOKEN angular-pwa-ci - firebase deploy -m "build $TRAVIS_BUILD_ID" --non-interactive --token $FIREBASE_TOKEN cache: directories: - "node_modules" 

Hagamos commit y enviemos los nuestros a github. Como resultado, se disparar谩 el gatillo, lo que iniciar谩 el trabajo en travis-ci. Al final, nuestro proyecto de alojamiento Firebase se actualizar谩.


C贸digo fuente del proyecto disponible
Demo del proyecto
Puedes jugar con el c贸digo

Source: https://habr.com/ru/post/es413679/


All Articles