Acabo de actualizar mi proyecto a Angular 9 y lo primero que noté es que el tiempo de compilación aumentó significativamente en mi IC (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 Ivy , pero, según tengo entendido, esta compilación solo debería suceder con el código que no es compatible con Ivy.
Entonces, ¿por qué veo muchos Compiling @angular/common : es2015 as esm2015
(principalmente de paquetes @angulares) en mi compilación? ¿No debería ser el código angular en sí mismo compatible con Ivy?
Nota: Esto también sucede con un proyecto nuevo (solo con pocas bibliotecas).
Actualización Esto sucede con todos los comandos que requieren una compilación. Ex:
ng test --code-coverage=true --watch=false --browsers=ChromeHeadle
ng b -c=staging --aot
Actualización 2
Estoy agregando mis compilaciones para la comparación: pre angular 9 y después de la migración 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)
fuente
Respuestas:
Este artículo explica útilmente por qué Angular 9 compila dependencias con ngcc y el mapa de ruta de compilación de Ivy.
En resumen, dado que el conjunto de instrucciones de Ivy se estabilizará solo en Angular 10, el equipo de Angular recomienda no publicar aún los 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 se recomiendan.
A partir de esto, concluyo algún tiempo después del lanzamiento de Angular 10, veremos una compilación significativamente menor de ngcc, en algunos casos ninguno, dependiendo de los paquetes utilizados por un proyecto en particular. En Angular 9, el paso de compilación de ngcc es un compromiso necesario del que será difícil deshacerse.
En cuanto a la velocidad de CI, los documentos oficiales sugieren que ngcc se puede ejecutar explícitamente. Creo que es posible almacenar en caché este paso en CI, pero al no conocer su configuración particular, no puedo sugerir nada más allá de la dirección de investigación.
Actualización: Angular 9.1 promete mejoras en la velocidad de construcción de ngcc.
fuente