Angular6. PWA. Módulos de carregamento preguiçosos. Implantar automaticamente no Firebase

O Angular 6 permite literalmente, em alguns comandos, criar a base para o Progressive Web Application (PWA), criar layout para páginas de navegação, tabelas e painel.


Precisamos da versão angular-cli não inferior a 6.0.0, portanto, verifique a versão do pacote instalado:


ng --version 

e, se necessário, instale a versão mais recente:


 npm i -g @angular/cli 

Fazemos tudo isso, uma vez que existem diferenças na estrutura dos projetos criados pelas versões angular-cli 6 e nos projetos criados pelas versões anteriores. Também há diferenças na funcionalidade. Apenas sobre alguns desses recursos deste artigo.


Portanto, criaremos um projeto típico imediatamente com a funcionalidade de roteamento, pois também está planejado implementar uma demonstração dos recursos dos módulos de carregamento lento:


 ng new angular-pwa-ci --routing 

Para tornar mais conveniente rastrear as alterações que ocorrerão com o projeto, faremos o primeiro commit.


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

A equipe a seguir transformará nosso projeto em um Aplicativo da Web Progressivo (PWA)


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

A emissão dos resultados do comando contém o seguinte:


Título 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) 

Vamos fazer outro commit.


E nos apressaremos para ver como nosso aplicativo agora atende aos requisitos do PWA.


Para fazer isso, usaremos o utilitário lighthouse , que auditará nosso aplicativo e gerará um relatório detalhado sobre seus resultados.


Se esse utilitário ainda não estiver instalado, você poderá instalá-lo com o comando:


 npm i -g lighthouse 

Este utilitário também verifica se nosso aplicativo exibe conteúdo quando o javascript está desativado no navegador. Portanto, verificamos a presença no arquivo src/index.html da linha


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

Agora, construiremos nosso projeto no modo de production , pois as configurações padrão são para que os profissionais de serviço trabalhem apenas no modo de produção.


 ng build --prod 

Mais adiante neste artigo, o procedimento de implantação automática para hospedagem gratuita fornecida pelo serviço firebase será descrito, mas agora, para fins de desenvolvimento, precisaremos apenas do servidor local, que escreveremos agora. Crie o arquivo server.js na raiz do projeto
Se você usar o Visual Studio Code como editor, recomendo instalar a extensão Angular Essential , que inclui a extensão Angular v6 Snippets , com a qual você pode começar a digitar:


 ex-node- 


Concorde com o snippet proposto, especifique a porta e a pasta desejadas nas quais os arquivos para exibição estão localizados. E isso é tudo. Você pode executar:


 node server.js 

Nossa aplicação está disponível em: http://localhost:8080 e podemos iniciar a auditoria


 lighthouse http://localhost:8080 

O utilitário criará um arquivo na raiz do nosso projeto no formato localhost_2018-06-08_23-42-21.report.html . Abra-o em um navegador e veja os resultados da auditoria. Não marcamos 100%, mas ainda estamos à frente.


Para organizar o despejo automático de nosso aplicativo no firebase, você precisará de uma conta em http://firebase.com .


Depois disso, instale o firebase-tools . Vamos instalá-lo localmente, já que este pacote será usado no futuro para a destruição automática.


 npm i -D firebase-tools 

E para não escrever um caminho longo node_models/firebase-tools/bin/firebase todas as vezes - também o instalaremos globalmente.


 npm i -g firebase-tools 

Efetue login no serviço firebase:


 firebase login 

Este comando fará com que o navegador padrão seja aberto na página em que você será solicitado a conceder permissão ao aplicativo. Nós concordamos. Você pode trabalhar.


A criação de um novo projeto é possível apenas no Firebase Console; acesse https://console.firebase.google.com e crie um novo projeto, que chamaremos de angular-pwa-ci .


O próximo comando criará os arquivos de configuração.


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

Este comando exibirá uma caixa de diálogo onde:


  • escolha o projeto angular-pwa-ci ;
  • de serviços, usaremos apenas hosting ;
  • especificaremos dist/angular-pwa-ci/ pasta para sincronização;
  • configure nosso aplicativo como SPA (redirecione todas as solicitações para index.html);
  • recusar a reescrever index.html.

Agora apresentaremos nosso aplicativo para hospedagem no modo manual


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

Ao emitir este comando, o endereço onde nosso aplicativo estará disponível será indicado. Por exemplo, https://angular-pwa-ci.firebaseapp.com .


E agora, mais uma vez, auditaremos nosso aplicativo.


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


Aqui nosso aplicativo tornou-se PWA 100%.


Módulos de carregamento preguiçoso


Vamos decorar um pouco a nossa aplicação. Ao mesmo tempo, estamos explorando outro recurso do angular 6.
Adicione suporte angular / material ao nosso projeto.


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

UPD: Indicamos a versão para angular / material, uma vez que o último 6.3 gera um erro.


Agora crie a página de navegação do nosso aplicativo


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

É hora de fazer alterações manuais no código do nosso projeto.


 // 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'] }) 

Crie um módulo


 ng gm table --routing 

No módulo de table criado, crie um componente com marcação e estilos prontos.


 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 link ao routerLink e adicione 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> 

Depois disso, execute nosso aplicativo no modo de desenvolvimento ng serve . Preste atenção. Se você estava nesse modo antes, precisa reiniciar.
Podemos observar que um pedaço adicional foi criado.
E no painel do desenvolvedor, na guia Rede, veremos que, ao clicar no link, nosso módulo de tabela é carregado dinamicamente.



Vamos criar mais um módulo e componente funcional com marcação para painel


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

As ações para alterar o código são semelhantes ao módulo da tabela.


Como resultado, obtemos um aplicativo PWA com dois módulos funcionais carregados dinamicamente.
Chegou a hora de implementar a implantação automática de nosso aplicativo no firebase.


CD para Firebase


Precisamos de uma conta em https://travis-ci.org e uma conta em https://github.com .
Vamos criar o repositório angular-pwa-ci no github e colocar o código da nossa aplicação nele


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

Depois disso, conectaremos nosso repositório angular-pws-ci serviço angular-pws-ci . Para fazer isso, na página https://travis-ci.org/profile/ clique no botão sincronizar e, na lista com o repositório, conectamos angular-pwa-ci


Para implantar nosso aplicativo, precisamos de uma chave para isso, execute o comando


 firebase login:ci 

A emissão deste comando conterá a chave. Copie seu valor e inclua-o nas variáveis ​​de ambiente travis-ci sob o nome FIREBASE_TOKEN


Resta adicionar o arquivo .travis.yml ao nosso projeto


 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" 

Vamos fazer commit e enviar o nosso para o github. Como resultado, o gatilho será acionado, o que iniciará o trabalho no travis-ci. No final, nosso projeto de hospedagem de firebase será atualizado.


Código fonte do projeto disponível
Demonstração do projeto
Você pode jogar com o código

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


All Articles