O Angular 9 já está disponível - Ivy chegou

A versão 9 do Angular foi lançada, esta é a versão principal que cobre toda a plataforma, incluindo a estrutura em si, o material angular e a CLI. Nesta versão, os aplicativos por padrão alternam para o compilador e o tempo de execução Ivy e, também, fornecem maneiras aprimoradas de testar componentes.

Esta é uma das maiores atualizações angulares em três anos e a equipe de desenvolvimento está entusiasmada com as oportunidades que permitem que os desenvolvedores criem aplicativos melhores e contribuam para o ecossistema Angular.

Como atualizar para a versão 9


Vá para update.angular.io para obter mais informações. Para garantir que a atualização funcione sem problemas, é recomendável primeiro atualizar para a versão mais recente do Angular 8.

Atualizando para a versão mais recente 8

ng update @angular/cli@8 @angular/core@8

ng update @angular/cli @angular/core

Para se familiarizar com as principais alterações feitas nesta atualização, incluindo as APIs descontinuadas, consulte Atualizando para a versão 9 do Angular na documentação do Angular.

Hera


A versão 9 transfere todos os aplicativos para o compilador Ivy e o tempo de execução por padrão. Além de centenas de bugs corrigidos, o compilador Ivy e o tempo de execução oferecem muitas vantagens:

  • Tamanhos menores de pacotes
  • Teste mais rápido
  • Melhor depuração
  • Classe CSS aprimorada e ligações de estilo
  • Verificação de tipo aprimorada
  • Mensagens de erro de construção aprimoradas
  • Tempo de construção aprimorado, AOT ativado por padrão
  • Melhorando a internacionalização

Vamos considerar em detalhes algumas melhorias

Tamanhos menores de pacotes


O compilador Ivy foi projetado para remover partes do Angular que não são usadas com o compartilhamento de árvores e reduzir a quantidade de código gerado para componentes Angular.

Graças a essas melhorias, os aplicativos podem obter uma redução significativa no tamanho.

  • Pequenos aplicativos que não usam muitos dos recursos da estrutura podem se beneficiar mais com a criação de árvores.
  • Grandes aplicações com muitos componentes podem se beneficiar de tamanhos reduzidos de fábrica.
  • Os aplicativos de tamanho médio ficarão praticamente os mesmos, ou um pouco menores, pois se beneficiam menos com o corte de árvores e não usam muitos componentes para se beneficiar muito com fábricas menores.

imagem

Teste mais rápido


A implementação do Ivy TestBed também foi atualizada, tornando-se mais eficiente.

Anteriormente, TestBed recompilava todos os componentes entre as execuções de cada teste, independentemente de alguma alteração ter sido feita nos componentes (por exemplo, por meio de substituições).
No Ivy, o TestBed não recompila componentes, a menos que o componente tenha sido substituído manualmente, o que evita a recompilação entre a maioria dos testes.

Com essa alteração, os principais testes da estrutura passam aproximadamente 40% mais rápido. Espera-se que os usuários notem um aumento na velocidade de teste de seus aplicativos no nível de 40 a 50%.

Depuração aprimorada


Ivy fornece ferramentas adicionais para depuração de aplicativos. Ao iniciar o aplicativo no modo de desenvolvimento usando o tempo de execução Ivy, agora é oferecido um novo objeto para depuração ng.

  • Angular , .
  • , applyChanges

imagem

Ivy também aprimora o rastreamento de pilha para depurar problemas como ExpressionChangedAfterItHasBeenCheckederror. Anteriormente, a pilha não era muito útil:

imagem

com o Ivy, você vê informações mais úteis que permitem acessar diretamente a instrução de modelo com uma expressão modificada.

imagem

Por exemplo, se você clicar em AppComponent_Template na pilha acima, poderá ver uma linha específica no código gerado onde o erro ocorre:

imagem

Se desejar, você também pode acessar qualquer uma dessas instruções da estrutura para rastrear como a estrutura cria ou atualiza seus componentes .

Estilo aprimorado e classes CSS.


Ivy fornece aprimoramentos para lidar com estilos. Anteriormente, se um aplicativo contivesse definições de estilos concorrentes, esses estilos poderiam substituir um ao outro. Com Ivy, os estilos se mesclam previsivelmente.

Considere o seguinte modelo e fragmentos de componente:

<my-component style="color:red;" [style.color]="myColor" [style]="{color: myOtherColor}" myDirective></div>

@Component({
  host: {
    style: "color:blue"
  },...
})
...

@Directive({
  host: {
    style: "color:black",
    "[style.color]": "property"
  },...
})
...

Anteriormente, a ligação calculada pela última vez era aplicada e isso poderia depender do tempo em que as alterações foram feitas nessas expressões. Se myColor e myOtherColor fossem indefinidos, o estilo estático "vermelho" seria ignorado.

Na versão 9, você pode gerenciar seus estilos com uma prioridade clara e independente do tempo. Os estilos mais específicos têm precedência. Por exemplo, uma ligação para [style.color] substitui a ligação de interseção [style].

No entanto, por motivos de compatibilidade com versões anteriores, deixamos o comportamento de [ngStyle] e [ngClass] o mesmo de antes. Ao atualizar os valores de ajuste, os novos valores substituirão qualquer ajuste sobreposto.

Você pode ler mais sobre regras de precedência de estilo no guia de sintaxe do modelo.na documentação.

Como efeito colateral da refatoração de estilo, agora você também pode ligar-se a variáveis ​​CSS (propriedades customizadas de CSS).

<div [style.--main-border-color]=" '#CCC' ">
<p style="border: 1px solid var( - -main-border-color)">hi</p>
</div>

Verificação de tipo aprimorada


O compilador Angular pode verificar mais tipos de aplicativos e aplicar regras mais rigorosas. Esses recursos ajudarão você a identificar erros nos estágios iniciais de desenvolvimento.

Dois sinalizadores principais são suportados para verificações de tipo adicionais, além dos padrões:

  • fullTemplateTypeCheck - ativar esse sinalizador informa ao compilador para verificar tudo em seu modelo (ngIf, ngFor, tp-template, etc.)
  • strictTemplates - ativar esse sinalizador aplicará as regras mais rigorosas para verificação de tipo.

Mais sobre modelos de verificação de tipo

Erros de compilação corrigidos


O novo compilador Ivy não é apenas mais rápido e oferece maior segurança de tipo, mas também facilita a leitura de mensagens de erro.

Na versão 8 ou no View Engine, um erro típico do compilador será semelhante a este:

imagem

Na versão 9 com Ivy, o mesmo erro será o seguinte:

imagem

Tempo de construção aprimorado, o compilador AOT é ativado por padrão.


Graças à arquitetura Ivy, o desempenho do compilador melhorou significativamente.
Desempenho medido do compilador em termos de sobrecarga para uma compilação simples de aplicativos TypeScript. No nosso projeto de documentação (angular.io), a sobrecarga diminuiu de 0,8x para 0, x com Ivy, uma melhoria de quase 40%.

Isso significa que as compilações do AOT podem ser visivelmente mais rápidas. Graças a isso, você pode usar AOT mesmo no modo dev. Isso significa que o “ng servir” agora tem as mesmas vantagens que as versões construídas, melhorando a experiência de desenvolvimento do Angular.

Graças a alterações no compilador e no tempo de execução, entryComponents também não são mais necessários. Esses componentes serão detectados e compilados automaticamente quando usados.

Internacionalização aprimorada (i18n)


A internacionalização era um recurso da Angular, onde era possível criar um aplicativo uma vez para um local e obter aplicativos altamente otimizados e localizados. A versão 9.0 acelerou o processo movendo as pesquisas do i18n posteriormente no processo de construção. Essa alteração tornou 10 vezes mais rápido.

Mais sobre o novo i18n :angular/ localize e o novo angular.json.

Atualização ng mais confiável


Foram feitas alterações na operação da atualização ng para torná-la mais confiável e informativa.

  • Sempre use a versão mais recente da CLI. A partir da CLI 8.3.19, agora usamos a CLI da versão de destino da atualização. No futuro, as atualizações serão sempre processadas pela última CLI.
  • Melhor progresso na atualização. Agora, ng update fornece mais informações sobre o que está acontecendo sob o capô. Para cada migração, você verá informações sobre isso.
  • Depuração mais fácil de atualizações. Por padrão, ng update inicia todas as migrações e deixa as alterações cumulativas no disco para verificação. A atualização da versão 9 também apresenta um novo sinalizador --create-commits. Quando você executa ng update --create-commits, a ferramenta captura o estado da sua base de código após cada migração, para que você possa passo a passo fazer e depurar as alterações postadas no seu código.

Novos recursos "fornecidos"


Ao criar o serviço @Injectable no Angular, você deve escolher onde ele será adicionado ao injetor. Além das opções "raiz" e "módulo" anteriores, duas opções adicionais apareceram.

  • platform - fornecidoIn: a indicação 'platform' disponibiliza o serviço em um injetor de plataforma singleton especial, que é compartilhado por todos os aplicativos na página.
  • any - fornece uma instância única para cada módulo (incluindo módulos preguiçosos)

Mais informações sobre

Ligação de componente


O teste de componentes historicamente se baseou no uso de detalhes de implementação, como seletores de CSS, para encontrar componentes e acionar eventos. Isso significava que sempre que a biblioteca de componentes era alterada, todos os testes baseados nesses componentes tinham que ser atualizados.

A versão 9 introduziu ligações de componentes que oferecem uma maneira alternativa de testar. Abstraindo dos detalhes da implementação, você pode ter certeza de que seus testes estão definidos corretamente e são menos frágeis.

A maioria dos componentes do material angular agora pode ser testada usando essas ligações e também está disponível para qualquer componente de autor na composição (CDK).

Aqui está um exemplo de teste antes:


it("should switch to bug report template", async () => {
  expect(fixture.debugElement.query("bug-report-form")).toBeNull();
  const selectTrigger = fixture.debugElement.query(
    By.css(".mat-select-trigger")
  );
  selectTrigger.triggerEventHandler("click", {});
  fixture.detectChanges();
  await fixture.whenStable();
  const options = document.querySelectorAll(".mat-select-panel mat-option");
  options[1].click(); // Click the second option, "Bug".
  fixture.detectChanges();
  await fixture.whenStable();
  expect(fixture.debugElement.query("bug-report-form")).not.toBeNull();
});

E a mesma coisa agora:


it("should switch to bug report template", async () => {
  expect(fixture.debugElement.query("bug-report-form")).toBeNull();
  const select = await loader.getHarness(MatSelect);
  await select.clickOptions({ text: "Bug" });
  expect(fixture.debugElement.query("bug-report-form")).not.toBeNull();
});

Novos componentes


Agora você pode incorporar recursos do YouTube e Google Maps em seus aplicativos.

  • Você pode incorporar o player do YouTube em seu aplicativo com o novo player do youtube.
  • Também apresentamos componentes do google-maps. Esses componentes facilitam a visualização do Google Maps, exibem marcadores e conectam a interatividade para que funcione como um componente angular regular, eliminando a necessidade de aprender a API do Google Maps.

Melhoria do IDE e do serviço de idiomas


Foram feitas melhorias significativas na extensão do serviço de idioma Angular na plataforma Visual Studio Marketplace. Juntamente com os principais reparos arquitetônicos para resolver problemas de desempenho e estabilidade, muitos erros de longa data foram corrigidos.

  • A gramática TextMate para sintaxe de modelo agora permite destacar a sintaxe nos modelos incorporados e externos
  • Vá para Definição para templateUrl e styleUrls
  • Informações sobre tipo e NgModule na dica de ferramenta

Suporte ao TypeScript 3.7


O Angular foi atualizado para funcionar com o TypeScript 3.6 e 3.7, incluindo a função de ligação opcional extremamente popular no TypeScript 3.7. Para permanecer relevante para o ecossistema, também atualizamos versões de outras dependências, como zone.JS e RxJS.

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


All Articles