</>
  • Bosh sahifa
  • Men haqimda
  • Ko'nikmalar
  • Tajriba
  • Case Studies
  • Maqolalar
  • Loyihalar
madrimov.uz

Keling, jiddiy
tizim quramiz

madrimov5014@gmail.com→
</>© 2026 Madrimov Xudoshukur
GitHubTelegramEmail
← Maqolalar
14-iyun, 2026

Monorepo arxitekturasi: bitta repo, ko'p loyiha

MonorepoTurborepoBunArxitekturaDevOps

M-Smart School platformasini qurishda biz bir nechta ilovani (admin panel, o'qituvchi interfeysi, mobil API, umumiy UI kutubxonasi) bitta repozitoriyda saqlashga qaror qildik. Bu monorepo — bitta repo ichida ko'p loyiha. Quyida nega bu yondashuvni tanladik va uni qanday qurish kerakligini amaliyotdan kelib chiqib tushuntiraman.

Monorepo nima?

Monorepo — bu bir nechta mustaqil loyiha (ilovalar va kutubxonalar) bitta versiya nazorati repozitoriyasida birga yashaydigan arxitektura. Aksincha yondashuv — har bir loyiha alohida repoda bo'lishi — polyrepo deyiladi.

Monorepo — bu "hamma narsa bitta papkada" degani emas. Bu — aniq chegaralangan, mustaqil paketlar bitta joyda, umumiy vositalar bilan boshqariladi.

Qachon monorepo kerak?

Monorepo har doim ham to'g'ri tanlov emas. U quyidagi holatlarda kuchli:

  • Bir nechta ilova umumiy kod ulashadi (UI komponentlar, tiplar, util funksiyalar)
  • Frontend va backend tiplari sinxron bo'lishi kerak (end-to-end type safety)
  • Bitta jamoa bir nechta bog'liq loyihani parallel rivojlantiradi

Agar loyihalar butunlay mustaqil bo'lsa va alohida jamoalar tomonidan boshqarilsa, polyrepo soddaroq bo'lishi mumkin.

Struktura

Tipik Bun workspaces monorepo strukturasi quyidagicha ko'rinadi:

my-monorepo/
├── apps/
│   ├── admin/          # Next.js admin panel
│   ├── api/            # Bun + Hono backend
│   └── mobile-api/     # mobil uchun API
├── packages/
│   ├── ui/             # umumiy React komponentlar
│   ├── types/          # umumiy TypeScript tiplar
│   └── config/         # eslint, tsconfig, tailwind
├── package.json        # workspaces ta'rifi
└── turbo.json          # Turborepo pipeline

Workspaces ta'rifi

Ildiz package.json da workspace'larni e'lon qilamiz:

{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["apps/*", "packages/*"],
  "devDependencies": {
    "turbo": "^2.0.0"
  }
}

Turborepo bilan tezlashtirish

Monorepo o'sgani sayin build va test sekinlashadi. Turborepo bu muammoni keshlash va parallel bajarish orqali hal qiladi. turbo.json pipeline'ni belgilaydi:

{
  "$schema": "https://turbo.build/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "dist/**"]
    },
    "lint": {},
    "dev": { "cache": false, "persistent": true }
  }
}

Bu yerda muhim tushunchalar:

  • dependsOn: ["^build"] — paketni build qilishdan oldin uning bog'liqliklarini build qiladi
  • outputs — keshlanadigan natijalar; o'zgarmagan paket qayta build qilinmaydi
  • cache: false — dev serverlar uchun keshlash o'chiriladi

Amaliy ish oqimi

Kundalik buyruqlar ildizdan ishga tushiriladi va Turborepo qaysi paketlarni qayta ishlash kerakligini o'zi aniqlaydi:

# barcha ilovalarni parallel ishga tushirish
turbo dev

# faqat o'zgargan paketlarni build qilish (kesh bilan)
turbo build

# bitta ilovani filtrlash
turbo build --filter=admin

Afzallik va kamchiliklar

Real loyihalardan olingan xulosa — monorepo bepul kelmaydi:

  1. Yutuq: umumiy tiplar bilan frontend va backend hech qachon "desinxron" bo'lmaydi
  2. Yutuq: bitta PR'da bir nechta ilovaga tegishli o'zgarish — atomik va izchil
  3. Narx: CI/CD sozlash murakkabroq — faqat o'zgargan ilovani deploy qilish kerak
  4. Narx: repo kattalashadi, yangi dasturchi uchun kirish chegarasi yuqoriroq

Xulosa

Agar loyihalaringiz kod ulashsa va birga rivojlansa, monorepo + Turborepo kombinatsiyasi kuchli: type safety, atomik o'zgarishlar va tez build. Lekin uni CI/CD murakkabligi va katta repo bilan to'lashga tayyor bo'ling. Biz uchun M-Smart School'da bu to'g'ri tanlov bo'ldi — lekin har doimgidek, o'z kontekstingizda sinab ko'ring.

Turborepo hujjatlari — chuqurroq o'rganish uchun yaxshi boshlanish nuqtasi.