据我所知,在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 --prod
与ng build -e prod
不同。环境中的生产设置不会更改编译过程。 --prod
还设置--target=production
,这将触发AOT编译。
答案 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中使用bootstrapModule
,bootstrapModuleFactory
替换为grep bootstrapModuleFactory main.xxxxx.bundle.js
。
如果您检查生成的 dist / main.xxxxx.bundle.js (例如使用grep bootstrapModuleFactory
之类的工具),您将看到对{{1}的调用}}