当生产在环境中设置为true时,“构建”是否使用AOT编译?

时间:2017-06-13 09:41:28

标签: angular angular2-aot

据我所知,在ng build期间,默认情况下使用AOT编译,只有在开发(ng服务)时才需要设置--aot flag。

但是现在我面前有一个项目,它利用@ angular /编译器在多个位置的类和方法。然而,生产中“ng build”的结果:在环境中是真的没有任何失败,并且似乎意识到编译器。 如果我使用'ng serve --aot',但是我收到了预期的'Uncaught Error:Runtime compiler is not loaded'。

那是什么交易?是否默认使用AOT。

BTW:该项目使用Angular版本^ 4.0.0。

修改

@Melou和@PierreDuc向我展示了我的错误:ng build --prodng build -e prod不同。环境中的生产设置不会更改编译过程。 --prod还设置--target=production,这将触发AOT编译。

2 个答案:

答案 0 :(得分:4)

默认情况下,使用build command不使用AOT。仅在添加--prod参数时。这会将--target设置为生产,启用AOT并禁用源映射:

# these are equivalent
ng build --target=production --environment=prod
ng build --prod --env=prod
ng build --prod

答案 1 :(得分:2)

如果您使用Angular 4.0.0,则必须使用angular-cli> 1.0.0,在prod模式下默认使用aot。

Angular-cli会替换部分代码以使其正常工作。

例如,在您的main.ts中使用bootstrapModulebootstrapModuleFactory替换为grep bootstrapModuleFactory main.xxxxx.bundle.js

如果您检查生成的 dist / main.xxxxx.bundle.js (例如使用grep bootstrapModuleFactory之类的工具),您将看到对{{1}的调用}}