typescript - Hur man skapar en vanlig återanvändbar Angular-komponent för flera projekt


Förutsatt följande projektstruktur:

repo

  • Projekt A

    • package.json

      • @angular/core
      • package.json
      • @angular/core

    • dashboard.component.ts
  • Projekt B

    • package.json

      • @angular/core
      • package.json
      • @angular/core

    • panel.component.ts
  • Vanlig mapp

    • package.json

      • @angular/core
      • package.json
      • @angular/core

    • button.component.ts

Varje katalog är sitt eget lilla projekt, som inkluderar sitt eget beroende.

Jag försöker för närvarande importera knappkomponenten i Projekt A och Projekt B, med hjälp av vanlig modulimport. Det sagt, min import går tillbaka några steg ../../../common/button.component

För att deklarera en knapp i den gemensamma mappen behöver jag ha en node_modules-mapp där som innehåller @angular/core, annars kan jag inte använda import {Component} from '@angular/core'

Nu ser all den inställningen bra och fungerande ut, men när jag startar en av mina applikationer med ng serve får jag följande problem:

FEL i ../common/node_modules/@angular/core/src/render3/ng_dev_mode.d.ts(9,11): fel TS2451: Kan inte omdeklarera block-skopad variabel 'ngDevMode'. node_modules/@angular/core/src/render3/ng_dev_mode.d.ts(9,11): fel TS2451: Kan inte omdeklarera block-skopad variabel 'ngDevMode'.

Om jag tar bort @angular/core från det gemensamma modulen och försöker köra igen får jag:

FEL i ../common/components/angular/common.modules.ts(1,30): fel TS2307: Kan inte hitta modul '@angular/common'.

Vilket faktiskt är logiskt, eftersom node_modules inte längre är en del av det gemensamma projektet.

Jag skulle vilja veta hur man kringgår det problemet. Jag skulle troligen kunna importera @angular/core från ProjectA eller ProjectB, men då skulle det bryta mot regeln att inte ha något beroende av ProjectA och B för den gemensamma mappen (men det är okej att ha beroende av det gemensamma projektet).