Angular CLI9(Ivy)本地库(mono-repo)应用程序构建失败



我有一个Angular 9应用程序,我开始将一些组件移动到一个专用的库项目中,该项目使用辅助入口点(试图模仿Angular Material的方法(。如果我使用Ivy编译器同时构建库和应用程序,一切都会很好,但如果同时使用--prod标志构建库(这会导致在没有Ivy的情况下构建库(,应用程序构建会失败,并出现以下错误:

Compiling @fabric/components/breadcrumbs : es2015 as esm2015
ERROR in node_modules/@fabric/components/breadcrumbs/fab-breadcrumbs.module.d.ts:1:22 - error NG6002: Appears in the NgModule.imports of AppModule, but could not be resolved to an NgModule class.
This likely means that the library (@fabric/components/breadcrumbs) which declares FabBreadcrumbsModule has not been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a newer version of the library is available, and update if s
o. Also consider checking with the library's authors to see if the library is expected to be compatible with Ivy.
1 export declare class FabBreadcrumbsModule {
~~~~~~~~~~~~~~~~~~~~

我尝试更新到最新版本(9.0.2->9.1.0(,但它仍然在做同样的事情。我试着用一个全新的超简单单回购项目来重现这一点,但在这种简单的情况下,效果很好。我比较了我的应用程序和简单工作应用程序之间的tsconfig和angular.json配置文件,但它们完全相同。所以我有点被卡住了。我不确定是什么原因导致了这种情况,是在ng-packager方面,没有正确构建库,还是在应用程序方面的角度构建出现了问题。如有任何建议,我们将不胜感激!

通过一些故障排除,以及Angular团队的Pete提供的额外信息,我终于能够找出造成这种情况的根本原因。想在这里更新,以防其他人遇到同样的情况。这里的主要问题是,我的tsconfig.app.json是ng编译器在ng构建运行过程中使用的,它嵌套在src文件夹的下一层,而不是我项目的根目录。这意味着,它无法访问/dist文件夹,我的图书馆就建在那里。因此,即使我的主tsconfig已经正确定义了指向的路径/dist-lib文件夹,应用程序构建无法访问它。不幸的是,错误消息不太好,所以花了很多时间才弄清楚。

半相关问题发生在升级到Angular 10之后,它将项目中的tsconfig组织更改为";解决方案样式布局";,将主项目tsconfig.json重命名为tsconfig.base.json。这会抛出ngcc编译器,该编译器假设基本tsconfig只是tsconfig.jsson。因此,如果将ngcc设置作为安装后步骤,如果在tsconfig.base中定义了路径,则这将不起作用。解决方案是在ngcc安装后调用中添加一个--tsconfig标志,将其指向tsconfig.base.json。

相关内容

最新更新