Angular 9 在包导入范围方面有什么变化



我正在将一个大型V8应用程序迁移到V9,使用Material组件的组件出现错误。我得到error NG8001: 'mat-icon' is not a known element。我通过在包含组件定义的目录中的*.module.ts文件中添加MatIconModule的导入语句来解决这个问题。我遇到的问题是,在该目录上方的目录中还有另一个包含该导入语句的*.module.ts,但V9在搜索导入语句时似乎忽略了该文件。例如:-

+ parent-dir
+ child-dir
component-dir
child-dir.module.ts
+ parent-dir.module.ts

在本例中,我得到了component-dir中组件的错误,因为导入语句在child-dir.module.ts文件中丢失,即使它在parent-dir.module.ts文件中。当我将import语句添加到child-dir.module.ts文件时,它修复了这个问题。

在V8中,如上所述放置import语句是有效的,但在V9中,它似乎不再在目录层次结构中查找imports语句。

这在任何地方都有记录吗,因为我还没有找到它?在V10、V11和V12中,这种情况还会继续吗?我需要理解这一点,因为我的任务是将这个V8应用程序一直迁移到V12。

因为这种情况在使用旧的ViewEngine构建时有效,所以旧的ViewEngine似乎存在导出模块过多的问题。而Ivy只导出它被告知要导出的模块。这在某种程度上是对错误发生原因的简单解释。

解决方案是确保丢失的模块出现在适当的@NgModules类的exports阵列中。