angular - Hur man refererar kod från huvudingångspunkten i sekundära ingångspunkter så att sekundära ingångspunkter använder samma symboler från huvudingångspunkten
ng-packagr möjliggör sekundära ingångspunkter. Vid första anblicken, om sekundära ingångspunkter är "fristående", är det enkelt.
Men jag vill uppnå en liknande effekt som det Angular gör, t.ex. i HttpClientTestingModule:
https://github.com/angular/angular/blob/9.1.11/packages/common/http/testing/src/module.ts.
Nämligen: Jag vill ha en sekundär ingångspunkt som @my-lib/testing som exponerar saker för testning. Men dessa saker är beroende av @my-lib (precis som common/http/testing är beroende av import {HttpBackend, HttpClientModule} from '@angular/common/http';).
När jag helt enkelt importerar saker från
projects/my-lib/src
till en sekundär ingångspunkt skapar TypeScript-kompilatorn ett helt nytt paket, med en kopia av källkoden från projects/my-lib/src, men vad som är mer, det skapar olika dolda exporterade symboler som används internt (t.ex. i0 osv.) för beroendeinjektion. Som ett resultat, om jag gör detta i min testning av den sekundära ingångspunkten:
@NgModule({
imports: [MyLibModule],
providers: [
{
provide: MyLibService,
useClass: MyLibTestingService
}
]
})
export class MyLibTestingModule { }
då är MyLibService och MyLibModule helt olika saker för Angular DI, och att importera MyLibTestingModule i applikationen som använder biblioteket har inte den önskade effekten (dvs. att skriva över leverantören).
Tittar på
https://github.com/angular/angular/blob/9.1.11/packages/common/http/testing/src/module.ts,
Angular-teamet använder Bazel och vid testning av sekundär ingångspunkt hänvisar de till beroenden via paketnamn
importera {HttpBackend, HttpClientModule} från '@angular/common/http';
och det är Bazel som gör magin via denna konfiguration:
https://github.com/angular/angular/blob/9.1.11/packages/common/http/testing/BUILD.bazel
Är det möjligt att uppnå samma resultat med ett bibliotek som genererats av Angular CLI och som använder ng-packagr under huven?