在 Angular 10 中启用 Ivy 的问题

问题描述 投票:0回答:1

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

我们最近更新到 Angular 10 并启用了 Ivy 和 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 从该文件夹使用。

这适用于没有常春藤的 Angular 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

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

我们仍然不明白为什么这个错误只发生在ivy 上以及它实际上意味着什么。

第二个问题

然后我们尝试在没有 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严格得多。但我们需要 Ivy 来使用 Angular 10 的新定位功能。

因此,我们非常感谢您帮助解决这个问题。我们知道我们可能没有提供足够的信息,但我们只是不知道需要什么信息。因此,请告诉我们,我们就会交付。

感谢您的帮助

angular ivy
1个回答
4
投票

解决方案如下: Angular GitHub 问题

基本上这与包裹的消费地点有关。如果包位于项目之外,则需要

"preserveSymlinks": true

© www.soinside.com 2019 - 2024. All rights reserved.