为什么Angular 9必须预先编译自身代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Angular 9必须预先编译自身代码?相关的知识,希望对你有一定的参考价值。
我刚刚将项目升级到Angular 9,我注意到的第一件事是CI中的构建时间显着增加(从2分钟到4分钟)。
分析日志,每次执行测试或构建时,CLI都会进行预编译。这是由于new Ivy architecture造成的,但是从我的理解来看,这种编译应该只发生在与Ivy不兼容的代码上。
因此,为什么在我的版本中看到很多Compiling @angular/common : es2015 as esm2015
(大部分来自@angular软件包? Angular代码本身不应该与Ivy兼容吗?
注意:此also发生在一个新项目中(几乎没有库)。
更新所有需要构建的命令都会发生这种情况。例如:
ng test --code-coverage=true --watch=false --browsers=ChromeHeadle
ng b -c=staging --aot
更新2
我将我的构建进行比较:pre angular 9和angular 9 migration之后(构建仍然失败,但是我们可以使用单元测试作为参考,从大约2分钟到大约4分钟的总执行时间)
[This article有助于说明Angular 9为什么使用ngcc和Ivy编译路线图编译依赖关系。
简而言之,由于Ivy指令集仅会在Angular 10中稳定,因此Angular团队建议尚未发布编译为Angular 9 Ivy的软件包。 Angular 10之后,将鼓励软件包维护者发布Ivy软件包;仍将支持View Engine程序包,但不建议这样做。
由此,我得出结论,在Angular 10发布之后的一段时间内,我们将看到进行ngcc编译的次数明显减少,在某些情况下,这取决于特定项目使用的软件包。在Angular 9中,ngcc编译步骤是必不可少的折衷方案,您将很难摆脱。
关于CI速度,the official docs建议可以明确执行ngcc。我认为有可能在CI中缓存此步骤,但是由于您不了解您的特定设置,因此我无法提出任何超出研究方向的建议。
以上是关于为什么Angular 9必须预先编译自身代码?的主要内容,如果未能解决你的问题,请参考以下文章
编译 Angular 11(从 Angular 9 升级)应用程序时出错