gpt4 book ai didi

angular - 为什么 Angular 9 必须预编译自己的代码?

转载 作者:行者123 更新时间:2023-12-04 11:18:31 26 4
gpt4 key购买 nike

我刚刚将我的项目升级到 Angular 9,我注意到的第一件事是我的 CI 中的构建时间显着增加(从 2 分钟到 4 分钟)。

通过分析日志,每次执行测试或构建时,CLI 都会执行预编译。
这是由于 new Ivy architecture ,但据我所知,这种编译应该只发生在与 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

    我正在添加我的构建以进行比较: 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 中缓存这一步,但不知道您的特定设置,我不能建议超出研究方向的任何内容。
    更新 1: Angular 9.1 promises ngcc 构建速度改进。
    更新 2: Angular 12 deprecates legacy compilation and View Engine rendering pipeline.

    关于angular - 为什么 Angular 9 必须预编译自己的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160541/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com