Acabo de actualizar mi proyecto a Angular 9 y lo primero que noté es que el tiempo de compilación aumentó significativamente en mi CI (de 2 minutos a 4 minutos).
Al analizar los registros, cada vez que se realizan las pruebas o la compilación, la CLI realiza una compilación previa. Esto se debe a la nueva arquitectura de Ivy , pero según tengo entendido, esta compilación solo debería ocurrir con código que no sea compatible con Ivy.
Entonces, ¿por qué veo mucha Compiling @angular/common : es2015 as esm2015 (principalmente de paquetes @angular) en mi compilación? ¿No debería el código Angular ser compatible con Ivy?
Nota: Esto también sucede con un proyecto nuevo (solo con pocas bibliotecas).
Actualizar Esto sucede con todos los comandos que requieren una compilación. Ex:
ng test --code-coverage=true --watch=false --browsers=ChromeHeadleng b -c=staging --aotActualización 2
Estoy agregando mis compilaciones para comparar: antes de angular 9 y después de la migración de angular 9 (la compilación sigue fallando, pero podemos usar la prueba unitaria como referencia, de ~ 2 minutos a ~ 4 minutos de ejecución total)
Este artículo explica de manera útil por qué Angular 9 compila dependencias con ngcc y la hoja de ruta de compilación de Ivy.
En resumen, debido a que el conjunto de instrucciones de Ivy se estabilizará solo en Angular 10, el equipo de Angular recomienda no publicar aún paquetes compilados en Angular 9 Ivy. Después de Angular 10, se alentará a los mantenedores de paquetes a publicar paquetes Ivy; Los paquetes de View Engine seguirán siendo compatibles, pero no recomendados.
A partir de esto, concluyo que algún tiempo después del lanzamiento de Angular 10, veremos una compilación significativamente menor de ngcc, en algunos casos ninguna, según los paquetes utilizados por un proyecto en particular. En Angular 9, el paso de compilación ngcc es un compromiso necesario del que tendrá dificultades para deshacerse.
En cuanto a la velocidad de CI, los documentos oficiales sugieren que ngcc se puede ejecutar explícitamente. Creo que podría ser posible almacenar en caché este paso en CI, pero al no estar al tanto de su configuración particular, no puedo sugerir nada más allá de la dirección de investigación.
Actualización 1: Angular 9.1 promete mejoras en la velocidad de compilación de ngcc.
Actualización 2: Angular 12 desaprueba la compilación heredada y la canalización de representación de View Engine.
Actualización 3: Angular 13 ha eliminado ViewEngine