Website-Suche

Kompilation - Typescript und Arbeitsbereiche/Monorepo


Wir versuchen, den Monorepo-Ansatz (Yarns Workspaces) mit TypeScript zu verwenden.

Wir haben zum Beispiel zwei Bibliotheken: @project/main und @project/common.

tsconfig.json in jeder Bibliothek sieht folgendermaßen aus:

{
  ...
  "baseUrl": "./"
}

Dies ermöglicht uns, absolute Importe in jeder Bibliothek zu verwenden.

Gehen wir nun davon aus, dass eine index.ts in der @project/main-Bibliothek Folgendes enthält:

import { foo } from "@project/common";

und index.ts in @project/common enthält:

export * from "src/functions";

Während der Typprüfung/Kompilierung von @project/main wird Typescript versuchen, eine foo-Funktion in @project/main/src/functions.ts anstelle von @project/common/src/functions.ts zu finden

Das liegt daran, dass Typescript korrekt einem „@project/common“-Import folgen wird und dann versuchen wird, dem Export „src/functions“ zu folgen. Dieser Import ist jedoch absolut, daher wird Typescript eine baseUrl verwenden, die auf „@project/main“ verweist.

Um dieses Problem zu lösen, können wir so etwas hinzufügen:

{
  "paths": {
    "*": [
      "*",
      "../../node_modules/@project/common/*"
    ]
  }
},

zu tsconfig.json eines "@project/main"-Pakets.

Dies kann unser Problem lösen, bis wir auch eine functions.ts-Datei zum Hauptprojekt hinzufügen (@project/main/src/functions.ts).

Nun wird Typescript eine functions.ts von @project/main anstelle von @project/common verwenden, was offensichtlich ein inakzeptables Verhalten ist.

Also, meine Frage ist: Ist es möglich, TypeScript so zu konfigurieren, dass es eine baseUrl aus einer tsconfig.json verwendet, die neben der aktuell verarbeiteten Datei oder in ihrem übergeordneten Verzeichnis liegt?

Verwandte Artikel