Angular docs指定了使用AOT编译来支持JIT的几个原因:
但是,当寻找使用JIT的参数时,我什么也没找到。 此外,在从Angular 5.2升级到Angular 8 之后,在运行 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)时,一切都很好。 这让我感到惊讶,因为我从未遇到过 prod构建成功而 dev构建失败的Angular编译问题。
所以我的假设是JIT仅适用于开发版本(即速度)。并且可以安全地添加-aot 标志,而不会出现任何问题。 还是我错过了什么?
答案 0 :(得分:2)
您是对的,Angular提供了两种方法来绑定您的应用程序:
即时(JIT),可在运行时在浏览器中编译您的应用。 (当您运行ng serve
时)
提前(AOT),可在构建时编译您的应用。 (当您运行ng serve --aot=true
时)
带有--prod元标记(ng build --prod)的ng build命令默认情况下使用AOT编译。
在浏览器下载并运行该代码之前,Angular Ahead-of-Time(AOT)编译器会在构建阶段将Angular HTML和TypeScript代码转换为高效的JavaScript代码。在构建过程中编译应用程序可以在浏览器中提供更快的渲染速度。
JIT 在运行时编译您的应用程序时,它可以优化编译并仅构建必要的代码。因此,在开发模式下,通常使用JIT来节省完整构建的时间。使用JIT,编译时间会更快。
AOT 优化了运行速度,但是编译时间更长,这就是为什么在生产中经常使用它的原因。 AOT还将优化您的应用程序的大小,因为所有文件都将在运行之前进行编译。