在 ng build angular 中运行严格编译

Posted

技术标签:

【中文标题】在 ng build angular 中运行严格编译【英文标题】:run strict compilation in ng build angular 【发布时间】:2018-10-22 00:39:25 【问题描述】:

我在我的项目中使用 angular-cli。我的 package.json 中有这两个配置:

"scripts": 
  "ng": "ng",
  "build": "ng build --base-href /test/",
  "prod": "ng build --prod --base-href /test/"

--prod 检测编译问题(如死代码),正如 Angular 文档中所说,但它不在我们在开发模式下使用的构建命令中运行(实际上我们使用 npm start 但它做同样的事情)。

这导致在我们的持续交付工具中而不是在开发过程中检测到的问题太晚了。

我不想为开发角度编译任务添加--prod,我试图在“tsconfig”文件文档中查看它,但我没有找到任何选项。

我读到 --prod 使用 uglifyJs 启动了一个 uglification,它运行这个严格的编译。

我如何告诉 Angular 在我的开发“构建”任务中启动严格的编译,就像它在 --prod 中执行的方式一样? (我还在我的文件中尝试了“用户严格模式”,但没有改变任何东西)。

我在 Typescript 2.x 版本中使用 angular 5。

提前谢谢你。

【问题讨论】:

在 Angular 10+ 中,这已经设置为“开箱即用”并且严格的类型检查、未使用的 .ts 文件、方法和字段/属性即使在开发模式(ng serve)下也会被检查需要进行 AOT 编译,因此可以进行调试。 【参考方案1】:

您所要做的就是在运行应该进行更严格检查的构建时添加--aot 标志。例如,您的脚本可以配置为:

"scripts": 
  "ng": "ng",
  "build": "ng build --aot --base-href /test/",
  "prod": "ng build --prod --base-href /test/"

【讨论】:

但这阻止了调试的能力?这是非常不受欢迎的恕我直言。 @BernoulliIT 通常,如果您处于真正的“调试”阶段,您可能希望在没有--aot 标志的情况下进行不同的构建。通常我们会经历“这个工作到底能不能工作”的第一阶段,只有当它被清除后,我们才会担心运行 AOT 编译并对其进行严格检查。 OP 提到在开发模式(真正的“调试阶段”)中进行严格检查,因此 AOT 不合适。 @BernoulliIT 是的,虽然尝试检查编译问题而不只是......你知道,编译代码有点傻。运行 --aot 甚至不会触发 uglification(有一个单独的标志:--optimization),所以这并不是说您不能在该标志处于活动状态时进行调试。 @BernoulliIT 不用担心!我同意可调试编译代码的概念很奇怪,对于许多语言/框架来说并不现实。

以上是关于在 ng build angular 中运行严格编译的主要内容,如果未能解决你的问题,请参考以下文章

无法运行 Angular 站点,因为我的 angular.json 文件路径与 ng build 创建的不匹配

错误:“组件选择器”不是已知元素:在 Angular 5 应用程序上运行 ng-build

当同时运行 ng build --watch 和 ng serve 时,Angular 7 库 html-template 更改不会影响到应用程序

如何在使用ng build而不是ng serve时运行webpack?

Angular 6,在 ng build index.html 在控制台中出现错误之后

错误输入:'组件选择器'不是已知元素:在angular 5 app上运行ng-build