在Angular 10中启用常春藤的问题

问题描述

我们的角度应用程序有问题。

我们最近将角度更新为10,并启用了常春藤和aot。

现在我们遇到了一些我们无法解决的问题。

以下是我们设置的快速概述

该应用是企业规模的应用,包含几个相互依赖的库。

这些库随后将在其他角度应用程序/工作区中使用,它们本身包含进一步使用的库。

这是我们设置的简单说明:

核心存储库:

CoreApp
--projects
---coreLibA
---coreLibB
--src
---components <-- uses code from coreLibs

用户存储库

UserApp
--projects
---userLibA <-- uses core libs
---userLibB <-- uses core libs
--src
---components <-- uses core libs as well as code from userLibs

核心库内置于一个文件夹中,并且用户应用程序通过NPM从该文件夹中使用它们。

这与没有常春藤的有角10很好。

一个问题

因此,首先,我们在所有地方(库和应用程序)都启用了Ivy。我们能够毫无问题地构建coreLibs并将其安装到userApp中。 ng serve上的userApp也可以工作。但是,当我们尝试构建userLibs时,会遇到以下错误

ERROR: Cannot resolve type entity i4.CommonModule to symbol
An unhandled exception occurred: Cannot resolve type entity i4.CommonModule to symbol

我们能够通过删除ngModules中不必要的导入模块来解决其中的一些错误。但是可悲的是,我们无法解决所有问题。

我们仍然不明白为什么仅常春藤会发生此错误,以及它的实际含义。

第二个问题

然后,我们尝试在不使用ivy的情况下构建库,但仍使用ivy运行该应用程序。

这样,我们可以毫无问题地构建userLibs。但是,当我们尝试ng serve时,会发生以下错误

ERROR in the target entry-point "coreLibB" has missing dependecies:
 - @angular/localize/init
 - @angular/cdk/platform
 - rxjs/operators
 - coreLibA
 ... and some more

我们尝试通过在库package.json中添加硬依赖性并将其列入ng-package.json白名单来解决此问题。那行得通,但是npm install内存不足。因此,这也不是解决方案。

结论

Ivy似乎比View Engine严格得多。但是我们需要常春藤使用角度10的新定位功能

因此,我们非常感谢您解决此问题。我们知道我们可能没有提供足够的信息,但是我们只是不知道需要什么信息。因此,请让我们知道并交付。

感谢您的帮助

解决方法

这是解决方案: Anuglar GitHub Issue

基本上,它与使用软件包的位置有关。如果程序包不在项目中,则“ preserveSymlinks”:true是必需的。