angular - 角材料模块会自动摇树吗?
问题描述
我看到了以两种方式导入的 angular-material 单个模块。
- 将所有角度材料模块(MatButtonModule、MatRadioModule 等)导入到一个巨大的 angular-material.module 中,然后将该模块导入需要一些角度材料的任何 Angular 模块。
- 将单独的材料模块导入到它们各自的模块中,在那里使用。例如,我将在我的 RegistrationModule 中导入 ReactiveFormsModule(用户填写注册表单),但我不会将它导入其他延迟加载的模块中,因为那里没有表单。
第二个选项在我看来乏味且难以维护,因此我更喜欢第一个选项。但是,我希望将最终的捆绑包大小尽可能小。
这让我想到了我的问题:
角材料模块会自动摇树吗?
换句话说 - 当我将巨大的 angular.material.module.ts 导入到我的延迟加载模块中时 - 最终包是否会包含相应模块中未使用的 angular-material 模块?
我应该坚持第二个选项,还是可以将其全部塞入巨大的 angular-material.module 中?
解决方案
不,它不好,不要这样做。
这是关于这个主题的研究:https ://indepth.dev/stop-using-shared-material-module/
基本上,如果这样的魔法成为可能,没有人会费心将材料库拆分为模块的基调,通常每个人都会制作一个巨大的模块,并希望编译器能理解如何处理它。
也许在未来,有更多与 Ivy 相关的东西是可能的,但现在,它可能会排除一些服务和组件或纯函数,可能不会。
即使它会 - 编写代码通常是不好的做法,逻辑上不应该存在。