Özet - tsconfig derinlemesine
- TypeScript kursu
- Uzman
- Ders 17/35
- 4 dk
Ç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
// 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
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
tsc ____ --build
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 |