我无需澄清角度cli的死码消除/树木抖动。
我打算使用ngZorro ui库。根据文档,我需要在app.module文件中导入NgZorroAntdModule。它包含它提供的所有组件。现在,如果我只使用它们中的一部分,那么角度cli仍会捆绑我最终产品构建中的所有组件。
我尝试单独导入我需要的模块,它可以正常工作,但我仍然想知道即使在app.module中导入了角度cli的树抖动/死代码消除也会删除未使用的模块。 / p>
答案 0 :(得分:1)
以下是我检查过的类似事情
我在 app.module.ts 中包含了以下材料模块
但我只使用 mat-raised-button ,这是我代码中 MatButtonModule 的一部分。
当我使用 source-map-explorer 进行分析时,这就是我在 main 包中的内容
虽然我在我的手机中包含了菜单,工具栏,图标和FormField模块 app.module.ts,因为我没有在代码中使用它们,所以它们不是 包含在webpack包中。
这是我使用的构建配置 -
ng build --prod --build-optimizer --vendor-chunk --progress --output-hashing = all --stats-json --source-map = true
您可以在生成包之后对其进行分析,以使用以下工具查看包中包含的模块:
webpack-bundle-analyzer,source-map-explorer。
--source-map=true
生成prod版本优化构建包还取决于您用于prod构建的标志 有关可以使用的标志的详细信息,请参阅Angular Build Documentation。
答案 1 :(得分:0)
摇树仅能与库一起使用,构建库的方式使得构建优化器可以删除未使用的代码。
RxJS就是这种情况,它在v5.5之前不支持摇树
NG-Zorro仅具有一个导入模块(用于所有组件),但是从1.x版本开始,它现在支持摇树。