从 Angular 13 开始,如何通过 public-api.ts 公开 Angular 库的单个模块?

How to expose single modules of an Angular library through public-api.ts as of Angular 13?

我刚刚将一个 Angular 库项目从版本 11 升级到版本 13,在尝试 运行 ng build.

时出现错误

在版本 11 中,设置如下:

所以每个模块都是

@NgModule({
  declarations: [AComponent],
  imports: [],
  exports: [AComponent],
})
export class AModule {}
@NgModule({
  declarations: [BComponent],
  imports: [],
  exports: [BComponent],
})
export class BModule {}

并暴露于 public-api.ts:

export { AModule } from './lib/acomponent/a.module';
export { BModule } from './lib/bcomponent/b.module';

这与 Angular 11 一起工作得很好,我在其中使用 ngcc 来构建库。但是,在升级到 Angular 13(默认情况下库是使用 Ivy 部分编译模式构建的)之后,我得到了上面模块的错误:

error Unsupported private class AComponent. This class is visible to consumers via AModule -> AComponent, but is not exported from the top-level library entrypoint.

error Unsupported private class BComponent. This class is visible to consumers via BModule -> BComponent, but is not exported from the top-level library entrypoint.

那么如何在 Angular 库中公开模块?

您还需要通过 public-api:

导出组件
export { AModule } from './lib/acomponent/a.module';
export { AComponent } from './lib/acomponent/a.component';
export { BModule } from './lib/bcomponent/b.module';
export { BComponent } from './lib/bcomponent/b.component';