首页 > 解决方案 > 角材料模块会自动摇树吗?

问题描述

我看到了以两种方式导入的 angular-material 单个模块。

  1. 将所有角度材料模块(MatButtonModule、MatRadioModule 等)导入到一个巨大的 angular-material.module 中,然后将该模块导入需要一些角度材料的任何 Angular 模块。
  2. 将单独的材料模块导入到它们各自的模块中,在那里使用。例如,我将在我的 RegistrationModule 中导入 ReactiveFormsModule(用户填写注册表单),但我不会将它导入其他延迟加载的模块中,因为那里没有表单。

第二个选项在我看来乏味且难以维护,因此我更喜欢第一个选项。但是,我希望将最终的捆绑包大小尽可能小。


这让我想到了我的问题:


角材料模块会自动摇树吗?
换句话说 - 当我将巨大的 angular.material.module.ts 导入到我的延迟加载模块中时 - 最终包是否会包含相应模块中未使用的 angular-material 模块?


我应该坚持第二个选项,还是可以将其全部塞入巨大的 angular-material.module 中?

标签: angularangular-material

解决方案


不,它不好,不要这样做。

这是关于这个主题的研究:https ://indepth.dev/stop-using-shared-material-module/

基本上,如果这样的魔法成为可能,没有人会费心将材料库拆分为模块的基调,通常每个人都会制作一个巨大的模块,并希望编译器能理解如何处理它。

也许在未来,有更多与 Ivy 相关的东西是可能的,但现在,它可能会排除一些服务和组件或纯函数,可能不会。

即使它会 - 编写代码通常是不好的做法,逻辑上不应该存在。


推荐阅读