typescript - Hur exponerar man enskilda moduler i ett Angular-bibliotek genom public-api.ts från och med Angular 13?
Jag har precis uppgraderat ett Angular-biblioteksprojekt från version 11 till 13 och fick ett fel när jag försökte köra ng build.
Vid version 11 var inställningen följande:
- Jag hade flera mindre moduler, var och en bestående av flera komponenter och direktiv
- varje modul exponerades från
public-api.ts - användargränssnittet för konsumenten kunde importera varje modul där det behövdes
Så varje modul skulle enkelt vara
@NgModule({
declarations: [AComponent],
imports: [],
exports: [AComponent],
})
export class AModule {}
@NgModule({
declarations: [BComponent],
imports: [],
exports: [BComponent],
})
export class BModule {}
Och exponerad från public-api.ts:
export { AModule } from './lib/acomponent/a.module';
export { BModule } from './lib/bcomponent/b.module';
Detta fungerade alldeles utmärkt med Angular 11, där jag använde ngcc för att bygga biblioteket. Men efter uppgraderingen till Angular 13 (där bibliotek byggs med Ivy delvis kompilationsläge som standard), fick jag ett fel för modulerna ovan:
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.
Så hur exponerar man moduler i ett Angular-bibliotek?
Svar #1
Du behöver också exportera komponenterna via din 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';
