Angular - 如果已将不必要的 ngModule 导入别处,导入它们是否会增加文件大小?

Angular - Does importing unnecessary ngModules increase file size if they have been imported elsewhere?

我正在使用一个相当大的 Angular 应用程序,目前所有共享组件和模块都在一个共享模块中,每当我需要它导出的任何东西时我都会导入它。

但是我有一些小的功能模块,只需要共享模块中的很少模块,我是否应该增加架构的复杂性和模块化,以便只导入我需要的模块,即使它们被导入其他地方?

Angular docs state 已经在另一个模块中导入的模块被缓存并且不是问题,但这意味着什么,应用程序甚至获得 slower/bigger那么?

示例: 模块 1 导入 A、B、C。 模块 2 导入 A、C、D。

如果我在两个模块中导入 A、B、C、D(例如,通过共享模块),是否会有性能损失?

也许吧。这取决于您应用的结构。

如果您不使用 lazy-loading,您可以按照文档进行操作,它不会重复任何代码。使用 angular-cli 的原始配置创建的默认 chunks 将为您的模块(以及其他内容的其他块)生成一个 scripts.bundle.js

现在,如果您正在使用 lazy-loading(正如您在问题的评论中所说),它将创建一个 chunk每个延迟加载的模块,你应该谨慎行事。

angular-cli 使用 webpack 来创建这些块,并且在发表此评论时,它 将复制 导入的模块(和第三个派对图书馆!)在每个需要它们的块上。

这是一个 known issue and it has been partially addressed, but it's waiting for webpack to implement a feature 需要解决的问题。

建议:

为每个惰性加载模块创建一个 SharedModule,并且 import/declare 仅创建该模块所需的东西,并仅使用此 SharedModule不要从惰性加载模块.

中导入主应用程序的 SharedModule

这仍然会复制不同块所需的模块,但至少不会在不需要的地方添加不必要的模块。

并留意上面链接的问题,这样您就知道什么时候可以避免这种解决方法。

干杯!