TypeScript
Project references
Project references ile çok projeli yapıyı öğrenirsin.
Project references nedir?
references dizisi, bir projenin bağımlı olduğu diğer projeleri listeler; her öğe bir path alanıyla hedef tsconfig.json'u işaret eder. Bu, monorepo yapısında projeleri bölmek için kullanılır. Referans alınan projeler composite: true olmalıdır.
{
"references": [
{ "path": "../core" },
{ "path": "../utils" }
]
}
Build modu, referansları otomatik olarak önce derler.
Composite zorunluluğu
Bir proje referans alınıyorsa composite: true olmalıdır; aksi halde tsc --build hata verir. Composite, declaration: true ve outDir'i de zorunlu kılar; böylece referans alan proje tür bildirimlerini bulabilir.
// core/tsconfig.json
{
"compilerOptions": {
"composite": true,
"declaration": true,
"outDir": "dist"
}
}
Composite kapalıyken referans almak derleme hatasıdır.
Uygulama Derleme sırasını çöz
Bir resolveBuildOrder fonksiyonu yaz: proje listesindeki references'a göre topolojik sırayı döndürsün. app → core, core → utils bağımlılıkları için utils, core, app çıktısını üret.
Örnek çözümü göster
function resolveBuildOrder(projects: { name: string; references: string[] }[]): string[] {
const order: string[] = [];
const visited = new Set<string>();
function visit(name: string) {
if (visited.has(name)) return;
visited.add(name);
const project = projects.find(p => p.name === name);
if (project) {
for (const ref of project.references) {
visit(ref);
}
}
order.push(name);
}
for (const p of projects) visit(p.name);
return order;
}
const projects = [
{ name: "app", references: ["core"] },
{ name: "core", references: ["utils"] },
{ name: "utils", references: [] }
];
console.log(resolveBuildOrder(projects).join(", "));
Kendini test et
-
references dizisindeki her öğe ne içerir?
- Bir type alanı
- Bir path alanı
- Bir name alanı
- Bir version alanı
Cevabı göster
Bir path alanı — Her referans öğesi bir path alanı içerir ve hedef tsconfig.json'u işaret eder; name, version ve type referans şemasının parçası değildir.
-
Referans yolu ekle
{
"references": [
{ "____": "../core" }
]
}
Cevabı göster
{
"references": [
{ "path": "../core" }
]
}
-
Project references parçaları
- references
- bağımlı projeleri listeler
- path
- hedef tsconfig'u işaret eder
- composite: true
- referans alınabilirliği açar
- declaration: true
- tür bildirimlerini üretir
Sıradaki ders: Module resolution