なぜAngular 9は自分でコードをプリコンパイルする必要があるのですか?


8

プロジェクトをAngular 9にアップグレードしました。最初に気付いたのは、CIでビルド時間が大幅に増加したことです(2分から4分に)。

ログを分析すると、テストまたはビルドが実行されるたびに、CLIがプリコンパイルを実行します。これは新しいIvyアーキテクチャが原因ですが、私の理解から、このコンパイルはIvy互換でないコードでのみ発生するはずです。

それでCompiling @angular/common : es2015 as esm2015、ビルドに多くの(主に@angularパッケージから)が表示されるのはなぜですか?Angularコード自体はIvyと互換性があってはいけませんか?

注:これは新しいプロジェクトで発生します(ライブラリが少ない場合のみ)。

更新 これは、ビルドが必要なすべてのコマンドで発生します。例:

  • ng test --code-coverage=true --watch=false --browsers=ChromeHeadle
  • ng b -c=staging --aot

アップデート2

私は私は比較のためにビルドを追加している:角度事前9とした後、角9移行(ビルドはまだ失敗が、私たちは〜に〜2分で、合計実行の4分を基準にユニットテストを使用することができます)


プロジェクトの実行/ビルドに使用しているコマンド/引数は何ですか?
カイラージョンソン

@KylerJohnson私は私の質問を更新しました
アンドレRoggeriカンポス

Angularはes2015としてコンパイルされます。ビルドはesm2015を使用しているため、再コンパイルする必要があります。
Roddy of the Frozen Peas

1
@RoddyoftheFrozenPeasですが、CLIで初期化された新しいプロジェクトでもこの動作があります。この再コンパイルを回避するためにビルドターゲットを変更することは可能ですか?
アンドレ・Roggeriカンポス

つまり、理由によりesm2015を使用していたと思いますが、プロジェクトでes2015を使用するように変更する場合は、プリコンパイルされたバイナリを使用する必要があります。
Roddy of the Frozen Peas

回答:


7

この記事では、Angular 9がngccとIvyコンパイルロードマップを使用して依存関係をコンパイルする理由について説明します。

つまり、Ivy命令セットはAngular 10でのみ安定化されるため、Angularチームは、Angular 9 Ivyにコンパイルされたパッケージを公開しないことを推奨しています。Angular 10以降、パッケージのメンテナーはIvyパッケージを公開することが推奨されます。View Engineパッケージは引き続きサポートされますが、推奨されません。

このことから、Angular 10のリリース後しばらくすると、特定のプロジェクトで使用されているパッケージによっては、ngccコンパイルが大幅に少なくなり、場合によっては何も起こらないことがわかります。Angular 9では、ngccのコンパイルステップは、あなたが取り除くのに苦労する必要のある妥協です。

CI速度については、公式ドキュメントで ngccを明示的に実行できることが示唆されています。このステップをCIにキャッシュすることは可能かもしれませんが、特定のセットアップを認識していないので、研究の方向性を超えて何も提案できません。

更新: Angular 9.1 では、ngccビルド速度の向上が約束されています。


1
なるほど、Angularは、Ivyコンパイル済みパッケージを提供しないという推奨事項に従っているだけですか?
アンドレ・Roggeriカンポス

@AndréRoggeriCamposそれは私が参照したリソースに基づいて、それが私が信じていることです。
Klaster_1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.