tRPC dərsindəki hekayəni xatırlayırsınız: title sahəsinin adını heading etdilər, server işləyir, testlər yaşıldır, amma istifadəçilərin tətbiqində başlıqlar yoxa çıxıb? tRPC bu bəlanın qarşısını bir layihənin daxilində alır. Bəs Leylanın web-i ilə Muradın api-si müxtəlif repozitoriyalarda yaşayırsa və hətta tRPC işlətmirsə? Bu dərsdə monorepozitorinin nə olduğunu, ayrı-ayrı repozitoriyalar dəstindən (polyrepo) nə ilə fərqləndiyini, necə qurulduğunu və hansı hallarda sizə lazım olmadığını öyrənəcəksiniz.
Problem: iki repozitoriya — bir məhsul
Leyla notes-web, Murad isə notes-api yazır. Bunlar öz package.json faylları, linter qaydaları, CI və buraxılışları olan iki repozitoriyadır. Note tipi hər ikisinə lazımdır, ona görə Leyla martda onu özünə kopyalayıb. Aprelde Murad sahənin adını dəyişdi:
// notes-api/src/types.ts (Murad renamed the field in April)
export type Note = { id: string; heading: string };
// notes-web/src/types.ts (Leyla copied the type in March)
export type Note = { id: string; title: string };Hər repozitoriya ayrılıqda qaydasındadır: tiplər üst-üstə düşür, testlər keçir, CI yaşıldır. Xətanı yalnız istifadəçi tapacaq — boş başlıqları görəndə. Belə yanaşmanın tipik ağrıları var.
- Kodun nüsxələri. Tipləri, məlumatın yoxlanma sxemlərini və kiçik funksiyaları repozitoriyadan repozitoriyaya kopyalayırlar — nüsxələr isə ayrılır.
- Versiyaların fərqlənməsi. Bir layihədə
zod-un üçüncü, digərində dördüncü versiyası var, hər birinin öztsconfigvə ESLint qaydaları. - Bir neçə repozitoriya üzrə dəyişikliklər. Bir düzəliş müxtəlif yerlərdə iki pull request, birləşdirmə ardıcıllığı barədə razılaşma və əlaqələndirilmiş buraxılış deməkdir.
- Uzun tanışlıq. Yeni gələn N repozitoriyanı klonlayıb qurur və N qayda dəstini öyrənir.
Monorepozitori nədir
Monorepozitori (monorepo) — bir neçə layihənin: bir-birindən asılı ola bilən tətbiqlərin və kitabxanaların dayandığı bir Git repozitoriyasıdır. Hər layihə öz package.json faylı olan ayrıca paket olaraq qalır.
Çoxmənzilli binanı və ayrı-ayrı fərdi evləri təsəvvür edin. Binada ümumi özül, lift və istilik var — bunlar ümumi alətlər və ümumi koddur. Amma hər mənzilin öz qapısı və öz divarları var — bunlar paketlər arasındakı sərhədlərdir. Fərdi evlərdə hər kəs öz borularını özü təmir edir.
⚠️ Monorepozitori monolit deyil. Monorepo «kod harada saxlanır» sualına cavab verir, monolit isə «kod necə yerləşdirilir» sualına. Monorepoda
webvəapiyenə də ayrıca yerləşdirilən ayrı tətbiqlərdir. Monolit və mikroservislər barədə kursun ayrıca mövzusu danışacaq.