'ng build'与'ng build --prod'的不一致

时间:2018-03-02 08:52:14

标签: angular angular-cli

我正在开发一个有角度的应用程序。

使用

  • Angular 5.2.5
  • Angular CLI 1.6.8

当我执行命令

ng build

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

ng build --prod

我收到了错误

  

属性'someProperty'是私有的,只能在“SomeComponent”类中访问。

报告的错误是正确的,我修好了。

问题是为什么dev build没有报告这个?这是angular-cli中的缺陷还是我错过了什么?

由于

3 个答案:

答案 0 :(得分:17)

ng build --prod compile with Ahead of time compilation。要通过aot编译,您需要将属性someProperty传递给publicSee this issue on 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

Documentation ng build

希望它有所帮助。

答案 1 :(得分:5)

--prod标志激活许多优化标志。其中一个是--aot用于Ahead Of Time编译。您的组件模板在构建期间进行编译,因此TypeScript可以检测代码中的更多问题。你可以在开发模式下编译,但如果你想在构建prod之前看到这个错误,仍然可以激活--aot标志。

来自the official compiler documentation

  

提前检测模板错误

     

AOT编译器在构建步骤中检测并报告模板绑定错误,然后用户才能看到它们。

答案 2 :(得分:0)

这是为了最小化开发模式下的构建时间。 在我的项目中构建--prod需要花费二十倍的时间