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?