Project references
- TypeScript kursu
- Uzman
- Ders 14/35
- 4 dk
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
// 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
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
{
"references": [
{ "____": "../core" }
]
}
{
"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 |