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?