Ich habe gerade mein Projekt auf Angular 9 aktualisiert und als erstes habe ich festgestellt, dass sich die Erstellungszeit in meinem CI erheblich erhöht hat (von 2 Minuten auf 4 Minuten).
Die CLI analysiert die Protokolle jedes Mal, wenn die Tests oder der Build ausgeführt werden, und führt eine Vorkompilierung durch. Dies liegt an der neuen Ivy-Architektur , aber nach meinem Verständnis sollte diese Kompilierung nur Code enthalten, der nicht Ivy-kompatibel ist.
Warum sehe ich Compiling @angular/common : es2015 as esm2015
in meinem Build viele (hauptsächlich aus @ Angular-Paketen)? Sollte Angular Code selbst nicht mit Ivy kompatibel sein?
Hinweis: Diese auch geschieht mit einem frischen Projekt (Just mit wenigen Bibliotheken).
Update Dies geschieht mit allen Befehlen, für die ein Build erforderlich ist. Ex:
ng test --code-coverage=true --watch=false --browsers=ChromeHeadle
ng b -c=staging --aot
Update 2
Ich füge meine Builds zum Vergleich hinzu: vor Winkel 9 und nach Winkel 9-Migration (Der Build schlägt immer noch fehl, aber wir können den Komponententest als Referenz verwenden, von ~ 2 Minuten bis ~ 4 Minuten Gesamtausführung).
quelle
Antworten:
Dieser Artikel erklärt hilfreich, warum Angular 9 Abhängigkeiten mit ngcc und der Roadmap für die Ivy-Kompilierung kompiliert.
Kurz gesagt, da der Ivy-Befehlssatz nur in Angular 10 stabilisiert wird, empfiehlt das Angular-Team, noch keine für Angular 9 Ivy kompilierten Pakete zu veröffentlichen. Nach Angular 10 werden Paketbetreuer aufgefordert, Ivy-Pakete zu veröffentlichen. View Engine-Pakete werden weiterhin unterstützt, aber nicht empfohlen.
Daraus schließe ich einige Zeit nach der Veröffentlichung von Angular 10, dass je nach den von einem bestimmten Projekt verwendeten Paketen deutlich weniger ngcc-Kompilierungen stattfinden werden, in einigen Fällen keine. In Angular 9 ist der ngcc-Kompilierungsschritt ein notwendiger Kompromiss, den Sie nur schwer loswerden können.
In Bezug auf die CI-Geschwindigkeit schlagen die offiziellen Dokumente vor, dass ngcc explizit ausgeführt werden kann. Ich denke, es ist möglich, diesen Schritt in CI zwischenzuspeichern, aber da ich mir Ihres speziellen Setups nicht bewusst bin, kann ich nichts vorschlagen, was über die Forschungsrichtung hinausgeht.
Update: Angular 9.1 verspricht Verbesserungen der ngcc-Build-Geschwindigkeit.
quelle