为什么Angular 9必须预先编译自身代码?

问题描述 投票:3回答:1

我刚刚将项目升级到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 9angular 9 migration之后(构建仍然失败,但是我们可以使用单元测试作为参考,从大约2分钟到大约4分钟的总执行时间)

angular typescript ecmascript-6 angular-cli single-page-application
1个回答
0
投票

[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中缓存此步骤,但是由于您不了解您的特定设置,因此我无法提出任何超出研究方向的建议。

© www.soinside.com 2019 - 2024. All rights reserved.