【问题标题】:Potential drawbacks of Angular module importing modules it doesn't use?Angular 模块导入它不使用的模块的潜在缺点?
【发布时间】:2020-01-17 17:11:09
【问题描述】:

假设在我的 Angular 应用程序中,我有一个 NgModule,我想将一堆模块添加到它的 imports 数组中。我不想单独导入每个模块,而是将模块收集在一个组中并导入整个组。组中的一些模块实际上对那个 NgModule 有用,而其他模块则没有。

导入特定模块实际未使用的模块可能有哪些缺点?请注意,每个导入的模块仍然在应用程序中某处使用,只是在该特定模块中不需要它们。

例如,让我们考虑一个 index.ts 文件,其中包含常见输入组件的模块,位于路径 @app/common/inputs

// whatever imports are necessary

const Modules = [
  TextBoxModule,
  SelectModule,
  DatePickerModule,
  // etc.
];

// export individual module types and the Modules array

我有 MyWonderfulComponent,它使用 TextBoxComponent 和 DatePickerComponent(分别使用 TextBoxModule 和 DatePickerModule)。但是,它不使用任何其他输入组件(包括 SelectComponent)。

尽管如此,作为一个懒惰的软件工程师,我将所有输入模块导入 MyWonderfulModule,因为它只需要 1 行而不是仅导入 TextBoxModule 和 DatePickerModule 的 2 行:

// some basic imports
import * as Inputs from '@app/common/inputs';

@NgModule({
  declarations: [
    MyWonderfulComponent
  ],
  imports: [
    ...Inputs.Modules,
    // etc.
  ],
  exports: [
    MyWonderfulComponent
  ]
})
export class MyWonderfulModule {
}

将不需要的 SelectModule(和一堆其他输入模块)与急需的 TextBoxModule 和 DatePickerModule 一起导入有什么缺点?

它是否有任何显着的性能或内存损失?它会导致更长的编译过程和/或更大的输出文件吗?或者可能不需要的导入“就在那里”并且对应用没有重大影响?

(记住 - 所有输入模块都在某处 使用 - 只是 MyWonderfulComponent 不使用文本框和日期选择器之外的任何东西)

【问题讨论】:

    标签: angular import ng-modules


    【解决方案1】:

    已导入但未使用的模块将从 Angular 应用的生产版本中删除,因此它根本不会影响生产性能。

    话虽如此,如果它们没有在该模块中使用,我建议将它们从该模块的 imports 数组中删除,以保持代码简洁明了。

    【讨论】:

    • 啊,但是我想精确地导入额外的模块以保持代码简洁明了。正如我在示例中所展示的:而不是导入一堆单独的输入组件模块 - 如果我使用另一个输入组件则必须添加另一个模块 - 我只是将一个可重用的输入模块数组扩展添加到导入数组在一行中。因为 - 正如你所说 - 额外的进口不会影响生产性能,所以这种方法应该可以安全使用。谢谢! ^^
    • 啊,我明白了。伟大的!很高兴我能帮上忙!
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多