4

Angular 文档指定了使用 AOT 编译来支持 JIT的几个原因:

  • 更快的渲染
  • 更少的异步请求
  • 较小的 Angular 框架下载大小
  • 更早地检测模板错误
  • 更好的安全性

但是,在寻找使用 JIT 的参数时,我没有找到。此外,在从 Angular 5.2 升级到 Angular 8后,我在运行开发构建(使用 JIT)时突然遇到一个奇怪的错误。错误是:

ERROR in ./src/app/shared/app-configuration/shared/app-configuration.model.ts 22:16-35
"export 'IMyComponents' was not found in '@mycompany/mypackage'

运行产品构建(使用 AOT)时,一切都很好。这让我感到惊讶,因为我从未遇到过prod 构建成功dev 构建失败的 Angular 编译问题。

所以我的假设是 JIT 只适用于开发构建(即速度)。添加--aot标志可以安全地完成,没有任何问题。还是我错过了什么?

4

1 回答 1

7

没错,Angular 提供了两种绑定应用程序的方法:

即时 (JIT),它在运行时在浏览器中编译您的应用程序。(当你跑步时ng serve

  • 在浏览器中编译
  • 每个文件单独编译
  • 更改代码后和重新加载浏览器页面之前无需构建
  • 适合当地发展

Ahead-of-Time (AOT),它在构建时编译您的应用程序。(当你跑步时ng serve --aot=true

  • 由机器自己编译,通过命令行(更快)
  • 所有代码一起编译,在脚本中内联 HTML/CSS
  • 无需部署编译器
  • 适用于生产构建

带有 --prod 元标志的 ng build 命令(ng build --prod)默认使用 AOT 编译。

Angular Ahead-of-Time (AOT) 编译器在浏览器下载和运行代码之前的构建阶段将您的 Angular HTML 和 TypeScript 代码转换为高效的 JavaScript 代码。在构建过程中编译您的应用程序可在浏览器中提供更快的呈现。

由于JIT在运行时编译您的应用程序,它可以优化编译并仅构建必要的代码。因此在开发模式下,通常使用 JIT 来节省完整构建的时间。使用 JIT 编译时间会更快。

AOT优化了运行速度,但编译时间更长,这就是为什么在生产中使用它很常见。AOT 还将优化您的应用程序的大小,因为所有文件都将在运行之前进行编译。

于 2019-06-28T07:36:24.940 回答