Ana içeriğe geç

Monorepo

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/monorepo

Kısaca

Monorepo, uygulamalar, servisler ve paylaşılan kütüphaneler gibi birçok projenin kodunu birlikte yönetilen tek bir sürüm kontrol deposunda tutma yaklaşımıdır.

Monorepo nedir?

Monorepo, her projeye ayrı bir depo vermek yerine birbiriyle ilişkili birden fazla projeyi tek bir depoda saklar. Bir şirket, web uygulamasını, mobil uygulamasını, arka uç servislerini ve paylaşılan arayüz ile yardımcı kütüphanelerini apps/ ve packages/ gibi klasörlerde yan yana tutabilir. Proje başına bir depo olan karşıt yaklaşıma polyrepo ya da multi-repo düzeni denir.

Başlıca avantaj, her şeyin birlikte değişebilmesidir. Bir geliştirici, paylaşılan bir kütüphaneyi ve onu kullanan her projeyi tek bir commit ve pull request'te güncelleyebilir; bu da büyük yeniden düzenlemeleri atomik yapar ve depolar arasında sürüm numaralarıyla uğraşmayı ortadan kaldırır. Monorepo'lar ayrıca kod, araç ve yapılandırma paylaşmayı ve projelerin birbirine nasıl bağlı olduğunu görmeyi kolaylaştırır.

Monorepo, bir ailenin önemli belgelerini farklı evlere dağılmış kutularda değil, iyi düzenlenmiş tek bir dosya dolabında tutmasına benzer. Herkes şeylerin nerede olduğunu bilir, ama dolap büyüdükçe iyi bir düzene ihtiyaç duyar. Büyük ölçekte monorepo'lar, her değişiklikte her şeyi yeniden derleyip yeniden test etmemek için özel araçlara dayanır: npm, pnpm ve Yarn'daki workspace'ler yerel paketleri birbirine bağlar; Nx, Turborepo ve Bazel gibi derleme sistemleri ise sonuçları önbelleğe alır ve yalnızca bir değişiklikten etkilenen görevleri çalıştırır.

Monorepo, monolit ile aynı şey değildir. Monolit tek bir birim olarak dağıtılan tek bir uygulamadır; monorepo ise birbirinden bağımsız dağıtılan birçok mikroservisi içerebilir. Terim kodun nasıl çalıştığını değil, nerede saklandığını tanımlar. Monorepo'ların bazı ödünleşimleri de vardır: çok büyük geçmişlerde yavaşlayan Git işlemleri, net kod sahipliği kurallarına duyulan ihtiyaç ve neyin derleneceği konusunda akıllı olması gereken CI hatları gibi.

Önemli noktalar

  • Monorepo, birçok projeyi ve paylaşılan kütüphaneyi tek bir depoda tutar.
  • Projeler arası değişiklikler tek bir atomik commit'te yapılabilir.
  • Workspace'ler ve Nx, Turborepo, Bazel gibi derleme araçları yalnızca etkilenen görevleri çalıştırarak derlemeleri hızlı tutar.
  • Monorepo kodun nasıl saklandığını anlatır, mimariyi değil; mikroservisleri de monolitleri de barındırabilir.
  • Alternatifi olan proje başına bir depo yaklaşımına polyrepo denir.

Örnek

npm workspaces ile bir monorepobash
# A typical monorepo layout:
#   apps/web/        customer-facing website
#   apps/api/        backend service
#   packages/ui/     shared UI components
#   package.json     "workspaces": ["apps/*", "packages/*"]

# Install dependencies for every project at once
npm install

# Build just one project
npm run build --workspace=apps/web

# Run tests in every project that has a test script
npm test --workspaces --if-present

Sık sorulan sorular

Monorepo ile polyrepo arasındaki fark nedir?

Monorepo birçok projeyi tek bir depoda saklarken, polyrepo düzeni her projeye kendi deposunu verir. Monorepo'lar kod paylaşmayı ve projeler arası değişiklik yapmayı basitleştirir; polyrepo'lar ise ekiplere daha fazla bağımsızlık tanır ve her depoyu küçük tutar.

Monorepo, monolit ile aynı şey midir?

Hayır. Monolit, tek bir birim olarak derlenen ve dağıtılan bir uygulamadır; monorepo ise yalnızca kodu saklama biçimidir. Tek bir monorepo, birbirinden bağımsız dağıtılan onlarca mikroservis içerebilir.

Monorepo'yu yönetmek için hangi araçlar kullanılır?

npm, pnpm ve Yarn'daki paket yöneticisi workspace'leri yerel paketleri birbirine bağlar. Nx, Turborepo ve Bazel gibi derleme araçları önbellekleme ekler ve yalnızca bir değişiklikten etkilenen görevleri çalıştırır; bu da depo büyüdükçe CI'ı hızlı tutar.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar