CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

index.ts
// resolveBuildOrder: references'a göre topolojik sıra verir
// her projenin references'ını takip et
// bağımlılık sırasıyla listele
// sonucu join ile yazdır

Örnek çözüm

index.ts
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(", "));

Beklenen çıktı

utils, core, app

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 references dizisindeki her öğe ne içerir?

  • Bir type alanı
  • Bir path alanı Doğru cevap
  • Bir name alanı
  • Bir version alanı

Açıklama: 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.

2 Referans yolu ekle

Soru
{
  "references": [
    { "____": "../core" }
  ]
}
Cevap
{
  "references": [
    { "path": "../core" }
  ]
}

Açıklama: Her referans öğesi path alanıyla hedef tsconfig.json'u işaret eder; name, dir ve ref geçerli alanlar değildir.

3 Project references parçaları

Kavram Anlamı
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

Uzman bölümündeki tüm dersler