角度-如果将不必要的ngModules导入其他地方,是否会增加文件大小?

Jak*_*ätt 6 angular-material angular-cli es6-modules ng-modules angular

我正在使用一个相当大的Angular应用程序,当前在共享模块中拥有所有共享组件和模块,只要需要导出任何内容,我都会导入该模块。

但是,我有一些小的功能模块,它们仅需要共享模块中的很少的模块,然后我是否应该增加体系结构的复杂性和模块化,以便仅导入所需的模块,即使它们已导入其他位置?

Angular 文档指出已缓存已导入到另一个模块中的导入模块,这不是问题,但这意味着,应用程序变慢/变大了吗?

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

如果我在两个模块中都导入了A,B,C,D(例如通过共享模块),会不会导致性能损失?

mat*_*rau 6

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

如果您不使用 lazy-loading,则可以遵循文档,并且不会重复任何代码。使用chunksangular-cli的原始配置创建的默认设置scripts.bundle.js将为您的模块生成一个(在其他大块中用于其他填充)。

现在,如果您正在使用 lazy-loading(正如您所说的那样,在问题注释中),它将chunk为每个延迟加载的模块创建一个,并且应谨慎进行。

angular-cli用于webpack创建这些块,并在发表本文时,它将在需要它们的每个块上复制导入的模块(和第三方库!)。

这是一个已知问题,已经部分解决,但是它正在等待webpack 实施解决该问题所需的功能

建议:

SharedModule为每个懒惰的模块创建一个,并仅导入/声明该模块所需的内容,并仅使用this SharedModule不要SharedModule从延迟加载的模块中导入主应用程序

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

并注意上面链接的问题,以便您知道何时可以避免此变通办法。

干杯!