CodeBlanks Logo Icon CodeBlanks

Özet - tsconfig derinlemesine

Çoklu proje referanslarıyla bir monorepo iskeleti kurarsın.

Özet: monorepo iskeleti

Bir monorepo iskeleti kurmak için dört parçayı birleştirirsin: composite: true ve incremental: true ile build modunu açar, references ile projeler arası bağımlılıkları tanımlar, moduleResolution ile çözümleme stratejisini seçer ve paths ile alias'ları tanımlarsın. Bu dördü birlikte, ölçeklenebilir ve hızlı derlenen bir yapı kurar.

{
  "compilerOptions": {
    "composite": true,
    "incremental": true,
    "moduleResolution": "bundler",
    "baseUrl": ".",
    "paths": { "@/*": ["src/*"] }
  },
  "references": [{ "path": "../core" }]
}

Bu iskelet, büyük kod tabanlarında tutarlılık ve hız sağlar.

Uygulama Monorepo yapılandır

Bir buildMonorepo fonksiyonu yaz: proje listesinden build sırasını çıkarsın (references'a göre topolojik sıra) ve toplam alias sayısını hesaplasın. app → core bağımlılığı, her projede bir alias olacak şekilde bir config için core, app | 2 çıktısını üret.

Başlangıç kodu

index.ts
// buildMonorepo: build sırasını ve alias sayısını verir
// references'a göre topolojik sıra çıkar
// her projenin paths alanındaki alias'ları say
// "core, app | 2" biçiminde yazdır

Örnek çözüm

index.ts
type ProjectConfig = {
  name: string;
  references: string[];
  paths: Record<string, string[]>;
};

function buildMonorepo(projects: ProjectConfig[]): { order: string[]; aliases: number } {
  const order: string[] = [];
  const visited = new Set<string>();

  function visit(name: string) {
    if (visited.has(name)) return;
    visited.add(name);
    const p = projects.find(x => x.name === name);
    if (p) {
      for (const ref of p.references) visit(ref);
      order.push(name);
    }
  }
  for (const p of projects) visit(p.name);

  let aliases = 0;
  for (const p of projects) {
    aliases += Object.keys(p.paths).length;
  }

  return { order, aliases };
}

const projects = [
  { name: "app", references: ["core"], paths: { "@app/*": ["src/*"] } },
  { name: "core", references: [], paths: { "@core/*": ["src/*"] } }
];
const result = buildMonorepo(projects);
console.log(result.order.join(", ") + " | " + result.aliases);

Beklenen çıktı

core, app | 2

Soru ve cevaplar

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

1 Bir monorepo iskeletinin kurulma sırası ne olmalıdır?

  • Önce moduleResolution, sonra paths, sonra references, en son composite
  • Önce references, sonra paths, sonra moduleResolution, en son composite
  • Önce paths, sonra references, sonra composite, en son moduleResolution
  • Önce composite ve references, sonra moduleResolution, en son paths Doğru cevap

Açıklama: Önce composite ve references ile proje iskeleti kurulur, sonra çözümleme stratejisi seçilir, en son alias'lar eklenir; bu sıra bağımlılık zincirini önce kurar.

2 Build komutu

Soru
tsc ____ --build
Cevap
tsc --build --build

Açıklama: Build modu için --build bayrağı kullanılır; --watch izleme modu, --check ve --emit ise build modu bayrakları değildir.

3 Monorepo iskeleti parçaları

Kavram Anlamı
composite: true referans alınabilirliği açar
references projeler arası bağımlılık
moduleResolution çözümleme stratejisi
paths alias eşlemeleri

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