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