从 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 中,设置如下:
- 我有几个较小的模块,每个模块由几个组件和指令组成
- 每个模块都从
public-api.ts
- 消费者UI能够在需要的地方导入每个模块
所以每个模块都是
@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';
我刚刚将一个 Angular 库项目从版本 11 升级到版本 13,在尝试 运行 ng build
.
在版本 11 中,设置如下:
- 我有几个较小的模块,每个模块由几个组件和指令组成
- 每个模块都从
public-api.ts
- 消费者UI能够在需要的地方导入每个模块
所以每个模块都是
@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';