Angular 9 ya está disponible: Ivy ha llegado

Se ha lanzado la versión 9 de Angular, esta es la versión principal que cubre toda la plataforma, incluido el marco en sí, el material angular y la CLI. En esta versión, las aplicaciones cambian de manera predeterminada al compilador y al tiempo de ejecución de Ivy y, además, proporcionan formas mejoradas de probar componentes.

Esta es una de las mayores actualizaciones de Angular en 3 años, y el equipo de desarrollo está entusiasmado con las oportunidades que permiten a los desarrolladores crear mejores aplicaciones y contribuir al ecosistema Angular.

Cómo actualizar a la versión 9


Vaya a update.angular.io para más información. Para garantizar que la actualización se ejecute sin problemas, se recomienda que primero actualice a la última versión de Angular 8.

Actualización a la última versión 8

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

ng update @angular/cli @angular/core

Para familiarizarse con los principales cambios realizados en esta actualización, incluidas las API obsoletas, consulte Actualización a la versión 9 de Angular en la documentación de Angular.

Hiedra


La versión 9 transfiere todas las aplicaciones al compilador y al tiempo de ejecución de Ivy de manera predeterminada. Además de cientos de errores corregidos, el compilador y el tiempo de ejecución de Ivy ofrecen muchas ventajas:

  • Tamaños de paquete más pequeños
  • Pruebas más rápidas
  • La mejor depuración
  • Enlaces de clase y estilo CSS mejorados
  • Comprobación de tipo mejorada
  • Mensajes de error de compilación mejorados
  • Tiempo de construcción mejorado, AOT habilitado por defecto
  • Mejorando la internacionalización

Consideremos en detalle algunas mejoras

Tamaños de paquete más pequeños


El compilador Ivy fue diseñado para eliminar partes de Angular que no se usan con el movimiento de árboles, y para reducir la cantidad de código generado para los componentes de Angular.

Gracias a estas mejoras, las aplicaciones pueden obtener una reducción significativa de tamaño.

  • Las aplicaciones pequeñas que no utilizan muchas de las características del marco pueden beneficiarse más del movimiento de árboles.
  • Las aplicaciones grandes con muchos componentes pueden beneficiarse de los tamaños reducidos de fábrica.
  • Las aplicaciones de tamaño mediano se volverán más o menos iguales, o un poco más pequeñas, ya que se benefician menos del corte de árboles y no usan muchos componentes para beneficiarse en gran medida de las fábricas más pequeñas.

imagen

Pruebas más rápidas


La implementación de Ivy TestBed también se ha actualizado, haciéndose más eficiente.

Anteriormente, TestBed recompilaba todos los componentes entre las ejecuciones de cada prueba, independientemente de si se realizaron cambios en los componentes (por ejemplo, mediante anulaciones).
En Ivy, TestBed no vuelve a compilar componentes a menos que el componente se haya anulado manualmente, lo que evita la recompilación entre la mayoría de las pruebas.

Con este cambio, las pruebas centrales del marco pasan aproximadamente un 40% más rápido. Se espera que los usuarios noten un aumento en la velocidad de prueba de sus aplicaciones al nivel del 40-50%.

Depuración mejorada


Ivy proporciona herramientas adicionales para depurar aplicaciones. Al iniciar la aplicación en modo de desarrollo utilizando el tiempo de ejecución de Ivy, ahora se ofrece un nuevo objeto para depurar ng.

  • Angular , .
  • , applyChanges

imagen

Ivy también mejora el seguimiento de la pila para problemas de depuración como ExpressionChangedAfterItHasBeenCheckederror. Anteriormente, la pila no era muy útil:

imagen

con Ivy, ve más información útil que le permite ir directamente a la instrucción de plantilla con una expresión modificada.

imagen

Por ejemplo, si hace clic en AppComponent_Template en la pila anterior, puede ver una línea específica en el código generado donde se produce el error:

imagen

si lo desea, también puede ir a cualquiera de estas instrucciones del marco para rastrear cómo el marco crea o actualiza sus componentes .

Estilo mejorado y clases CSS.


Ivy ofrece mejoras para el manejo de estilos. Anteriormente, si una aplicación contenía definiciones de estilo en competencia, estos estilos podrían reemplazarse entre sí. Con Ivy, los estilos se fusionan de manera predecible.

Considere la siguiente plantilla y fragmentos de componentes:

<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, se aplicaba el enlace que se calculó en último lugar, y esto podría depender del momento en que se realizaron los cambios en estas expresiones. Si myColor y myOtherColor no estuvieran definidos, se ignoraría el estilo estático "rojo".

En la versión 9, puede administrar sus estilos con una prioridad clara que es independiente del tiempo. Los estilos más específicos tienen prioridad. Por ejemplo, un enlace a [style.color] anula el enlace de intersección [style].

Sin embargo, por razones de compatibilidad con versiones anteriores, dejamos el comportamiento de [ngStyle] y [ngClass] igual que antes. Al actualizar los valores de ajuste, los nuevos valores anularán cualquier ajuste superpuesto.

Puede leer más sobre las reglas de precedencia de estilo en la guía de sintaxis de plantilla.en la documentación

Como efecto secundario de la refactorización de estilos, ahora también puede enlazar a variables CSS (propiedades personalizadas de CSS).

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

Comprobación de tipo mejorada


El compilador angular puede verificar más tipos de aplicaciones y aplicar reglas más estrictas. Estas características lo ayudarán a identificar errores en las primeras etapas de desarrollo.

Se admiten dos marcas principales para verificaciones de tipo adicionales además de las estándar:

  • fullTemplateTypeCheck: habilitar este indicador le dice al compilador que verifique todo en su plantilla (ngIf, ngFor, tp-template, etc.)
  • strictlyTemplates: la activación de este indicador aplicará las reglas más estrictas para la verificación de tipos.

Más información sobre las plantillas de verificación de tipos

Errores de compilación corregidos


El nuevo compilador Ivy no solo es más rápido y proporciona mayor seguridad de tipo, sino que también facilita la lectura de mensajes de error.

En la versión 8 o View Engine, un error típico del compilador se verá así:

imagen

en la versión 9 con Ivy, el mismo error se ve así:

imagen

Tiempo de compilación mejorado, el compilador AOT está habilitado de forma predeterminada.


Gracias a la arquitectura Ivy, el rendimiento del compilador ha mejorado significativamente.
Rendimiento medido del compilador en términos de gastos generales para una compilación simple de aplicaciones TypeScript. Para nuestro proyecto de documentación (angular.io), la sobrecarga disminuyó de 0.8x a 0, x con Ivy, una mejora de casi el 40%.

Esto significa que las compilaciones de AOT pueden ser notablemente más rápidas. Gracias a esto, puedes usar AOT incluso en modo dev. Esto significa que "ng serve" ahora tiene las mismas ventajas que las versiones de lanzamiento, mejorando la experiencia de desarrollo para Angular.

Gracias a los cambios en el compilador y el tiempo de ejecución, ya no se requieren entryComponents. Estos componentes se detectarán y compilarán automáticamente cuando se usen.

Internacionalización mejorada (i18n)


La internacionalización era una característica de Angular en la que se podía crear una aplicación una vez para un entorno local y obtener aplicaciones altamente optimizadas y localizadas. La versión 9.0 aceleró el proceso al mover las búsquedas de i18n más adelante en el proceso de compilación. Este cambio lo hizo 10 veces más rápido.

Más sobre el nuevo i18n :angular/ localize y el nuevo angular.json.

Actualización más confiable de ng


Se han realizado cambios en el funcionamiento de ng update para que sea más confiable e informativo.

  • Utilice siempre la última versión de la CLI. A partir de 8.3.19 CLI, ahora usamos la CLI de la versión de destino de la actualización. En el futuro, las actualizaciones siempre serán procesadas por la última CLI.
  • Mejor actualización de progreso. ng update ahora brinda más información sobre lo que sucede debajo del capó. Para cada migración, verá información al respecto.
  • Depuración más fácil de actualizaciones. De forma predeterminada, ng update inicia todas las migraciones y deja los cambios acumulativos en el disco para su verificación. La actualización de la Versión 9 también presenta una nueva bandera: crear-commits. Cuando ejecuta ng update --create-commits, la herramienta captura el estado de su base de código después de cada migración, para que pueda realizar y depurar paso a paso los cambios que se publican en su código.

Nuevas características "provideIn"


Cuando crea el servicio @Injectable en Angular, debe elegir dónde se agrega al inyector. Además de las opciones anteriores de "raíz" y "módulo", aparecieron dos opciones adicionales.

  • platform - ProvideIn: la indicación 'plataforma' hace que el servicio esté disponible en un inyector especial de plataforma única, que es compartido por todas las aplicaciones en la página.
  • any: proporciona una instancia única para cada módulo (incluidos los módulos diferidos)

Más información sobre

Enlace de componentes


Históricamente, las pruebas de componentes se han basado en el uso de detalles de implementación, como los selectores CSS, para encontrar componentes y desencadenar eventos. Esto significaba que cada vez que la biblioteca de componentes cambiaba, todas las pruebas basadas en estos componentes tenían que actualizarse.

La versión 9 introdujo enlaces de componentes que ofrecen una forma alternativa de prueba. Al abstraerse de los detalles de implementación, puede estar seguro de que sus pruebas están definidas correctamente y son menos frágiles.

La mayoría de los componentes del material angular ahora se pueden probar utilizando estos enlaces, y también están disponibles para cualquier componente de autor en la composición (CDK).

Aquí hay un ejemplo de prueba 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();
});

Y lo mismo ahora:


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();
});

Nuevos componentes


Ahora puede incorporar funciones de YouTube y Google Maps en sus aplicaciones.

  • Puede incrustar el reproductor de YouTube en su aplicación con el nuevo reproductor de YouTube.
  • También presentamos componentes de google-maps. Estos componentes facilitan la visualización de Google Maps, mostrar marcadores y conectar la interactividad para que funcione como un componente angular regular, eliminando la necesidad de aprender la API de Google Maps.

IDE y mejora del servicio de idiomas


Se han realizado mejoras significativas en la extensión del servicio de lenguaje Angular en la plataforma Visual Studio Marketplace. Junto con las principales reparaciones arquitectónicas para resolver problemas de rendimiento y estabilidad, se han solucionado muchos errores de larga data.

  • La gramática de TextMate para la sintaxis de plantillas ahora le permite resaltar la sintaxis tanto en plantillas incrustadas como externas.
  • Vaya a Definición para templateUrl y styleUrls
  • Información de tipo y NgModule en la información sobre herramientas

Soporte de TypeScript 3.7


Angular se ha actualizado para que funcione con TypeScript 3.6 y 3.7, incluida la función de enlace opcional extremadamente popular en TypeScript 3.7. Para seguir siendo relevantes para el ecosistema, también actualizamos versiones de otras dependencias como zone.JS y RxJS.

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


All Articles