在 Angular 中使用 JIT 编译比使用 AOT 有什么优势吗?

Is there any advantage of using JIT compilation in Angular in favor of using AOT?

Angular docs 说明了使用 AOT 编译支持 JIT 的几个原因:

但是,在寻找使用 JIT 的参数时,我发现 none。 此外,在 从 Angular 5.2 升级到 Angular 8 之后,当 运行 a dev 构建(使用 JIT)。 错误是:

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

当 运行 一个 prod 构建(使用 AOT)时,一切都很好。 这让我感到惊讶,因为我从来没有 运行 遇到 Angular 编译问题,其中 prod 构建成功 dev 构建失败 .

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

你说得对,Angular 提供了 2 种方法来绑定你的应用程序:

Just-in-Time (JIT),它会在 运行 时间在浏览器中编译您的应用程序。 (当你 运行 ng serve

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

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

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

The ng build command with the --prod meta-flag (ng build --prod) compiles with AOT by default.

The Angular Ahead-of-Time (AOT) compiler converts your Angular HTML and TypeScript code into efficient JavaScript code during the build phase before the browser downloads and runs that code. Compiling your application during the build process provides a faster rendering in the browser.

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

AOT优化了运行ning的速度,但是编译时间较长,所以在生产中比较常用。 AOT 还将优化您的应用程序的大小,因为所有文件都将在 运行 编译它之前进行编译。