即使在app.module中导入并且不使用它,angular-cli也会删除未使用的模块吗?

时间:2018-06-14 16:07:23

标签: angular ng-zorro-antd

我无需澄清角度cli的死码消除/树木抖动。

Github

我打算使用ngZorro ui库。根据文档,我需要在app.module文件中导入NgZorroAntdModule。它包含它提供的所有组件。现在,如果我只使用它们中的一部分,那么角度cli仍会捆绑我最终产品构建中的所有组件。

我尝试单独导入我需要的模块,它可以正常工作,但我仍然想知道即使在app.module中导入了角度cli的树抖动/死代码消除也会删除未使用的模块。 / p>

enter image description here

2 个答案:

答案 0 :(得分:1)

以下是我检查过的类似事情 我在 app.module.ts 中包含了以下材料模块 enter image description here 但我只使用 mat-raised-button ,这是我代码中 MatButtonModule 的一部分。
当我使用 source-map-explorer 进行分析时,这就是我在 main 包中的内容 enter image description here

  

虽然我在我的手机中包含了菜单,工具栏,图标和FormField模块   app.module.ts,因为我没有在代码中使用它们,所以它们不是   包含在webpack包中。

这是我使用的构建配置 -

  

ng build --prod --build-optimizer --vendor-chunk --progress   --output-hashing = all --stats-json --source-map = true

您可以在生成包之后对其进行分析,以使用以下工具查看包中包含的模块:
webpack-bundle-analyzersource-map-explorer

  • 您需要生成 stats.json 文件,然后使用 webpack-bundle-analyzer
  • 进行分析
  • for source-map-explorer 您需要使用--source-map=true生成prod版本

优化构建包还取决于您用于prod构建的标志 有关可以使用的标志的详细信息,请参阅Angular Build Documentation

答案 1 :(得分:0)

摇树仅能与库一起使用,构建库的方式使得构建优化器可以删除未使用的代码。

RxJS就是这种情况,它在v5.5之前不支持摇树

NG-Zorro仅具有一个导入模块(用于所有组件),但是从1.x版本开始,它现在支持摇树。