“ng build”与“ng build --prod”命令之间的不一致性

11

我正在开发一个 Angular 应用。

使用的版本信息如下:

  • Angular 5.2.5
  • Angular CLI 1.6.8

当我执行了以下命令时:

ng build

我没有收到任何错误,但是当我尝试进行生产构建时

ng build --prod

我遇到了错误

属性“someProperty”的类型为私有,仅在类“SomeComponent”中可访问

上报的错误是正确的,我已经修复了它。

问题是为什么dev构建没有报告这个错误? 这是angular-cli的缺陷还是我漏掉了什么?

谢谢

2个回答

38

ng build --prod 使用预编译(Ahead of Time)进行编译。为了通过aot编译,您需要将someProperty属性传递给public。请参阅angular-cli上的此问题

仅作提醒,ng buildng build --prod之间的区别是:

# these are equivalent
ng build --target=production --environment=prod
ng build --prod --env=prod
ng build --prod
# and so are these
ng build --target=development --environment=dev
ng build --dev --e=dev
ng build --dev
ng build

而且默认选项是使用--dev--prod标志的午餐:

Flag                 --dev    --prod
--aot                false    true
--environment        dev      prod
--output-hashing     media    all
--sourcemaps         true     false
--extract-css        false    true
--named-chunks       true     false
--build-optimizer    false    true with AOT and Angular 5

ng build 文档

希望有所帮助。


Angular 9+ 中的 Ivy 怎么样?它在开发中没有使用 JIT,是吗?但我仍然有许多错误未被注意到,直到生产构建。 - Alexey Grinko

18

--prod标志会激活许多优化标志之一是--aot,用于Ahead of Time编译。在构建期间编译组件模板,因此TypeScript可以检测到代码中更多的问题。您可以在dev模式下编译,但如果想在构建生产环境之前查看此错误,则仍然可以激活--aot标志。

来自官方编译器文档

更早地检测模板错误

AOT编译器在构建步骤期间检测并报告模板绑定错误,以便用户在见到错误之前就能进行修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接