Angular CLI 9(常春藤)应用程序构建与本地库(mono repo)失败

Angular CLI 9(常春藤)应用程序构建与本地库(mono repo)失败,angular,angular-material,ivy,angular-ivy,Angular,Angular Material,Ivy,Angular Ivy,我有一个Angular 9应用程序,我开始将一些组件移动到一个专用的库项目中,该项目使用二级入口点(尝试模仿Angular Material的方法)。如果我使用Ivy编译器同时生成库和应用程序,那么一切都会正常运行,但是如果同时使用--prod标志生成库(这会导致在不使用Ivy的情况下生成库),则应用程序生成会失败,并出现以下错误: Compiling @fabric/components/breadcrumbs : es2015 as esm2015 ERROR in node_module

我有一个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),但它仍然在做同样的事情。我试着用一个全新的超级简单的mono回购项目来重现这一点,但在这种简单的情况下,效果很好。我比较了我的应用程序和简单的工作应用程序之间的tsconfig和angular.json配置文件,但它们完全相同。所以我有点被卡住了。我不确定是什么原因导致了这种情况,无论是在ng Packagegr端,没有正确构建库,还是在应用程序端的角度构建上出现了问题。任何建议都将不胜感激

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


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

对不起,我不知道,但我很好奇:为什么在产品构建中禁用了Ivy?@Mic它在产品库构建中禁用,因为您希望最终将其发布到npm,Angular当前的建议是发布使用旧视图引擎编译的库,这样它们就具有更广泛的兼容性。