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