23 puan yazan xguru 2022-02-28 | 4 yorum | WhatsApp'ta paylaş

Monorepo nedir?

  • "Birden fazla ayrı projeyi, iyi tanımlanmış ilişkiler aracılığıyla tek bir repo içinde toplamak"
  • Monorepo ≠ Monolith

Neden yapılmalı?

  • Mevcut Polyrepo'yu (birden fazla repo kullanılan yaklaşım) seçme nedeni "takım özerkliği (team autonomy)" idi
    • Takımların istedikleri kütüphaneleri seçebilmesi ve kimin koda katkı yapacağına ve onu kullanacağına karar verebilmesi mümkündü
  • PolyRepo
    • Kod paylaşımı zahmetlidir
    • Kod tekrarı fazladır
    • Paylaşılan kütüphanelerde kritik hata ve büyük değişiklikler olduğunda maliyet yüksektir
    • Projeden projeye tutarsız geliştirme araçları kullanılır
  • Monorepo
    • Yeni proje oluşturmanın ek yükü yoktur
    • Tüm projelere yayılan atomik commit'ler
    • Her şeyi tek bir sürüm numarasıyla yönetme
    • Geliştirici hareketliliği (projeler arası geçiş)

Monorepo araçlarının sunduğu özellikler ve araçlar arası karşılaştırma

→ Bazel, Gradle, Lage, Lerna, Nx, Rush, Turborepo

  • Yerel önbellekleme
  • Yerel görev orkestrasyonu
  • Dağıtık önbellekleme
  • Dağıtık görev yürütme
  • Şeffaf uzak yürütme
  • Etkilenen proje/paketleri tespit etme
  • Workspace analizi
  • Bağımlılık grafiğini görselleştirme
  • Kod paylaşımı
  • Tutarlı araç seti
  • Kod üretimi
  • Proje kısıtları ve görünürlük

Bakış açısında değişim

Monorepo, sizin "organizasyonunuz ve kod hakkında düşünme biçiminizi" değiştirir

  • Tutarlılık ekleyerek,
  • Yeni projeler oluştururken veya büyük ölçekli refactoring yaparken sürtünmeyi azaltarak,
  • Kod paylaşımını ve takımlar arası iş birliğini teşvik ederek
  • organizasyonun daha verimli çalışmasını sağlayabilir

Çeşitli çözümler var, ancak her birinin hedefi farklı

  • Bazel (by Google): “A fast, scalable, multi-language and extensible build system.”
  • Gradle (by Gradle, Inc): “A fast, flexible polyglot build system designed for multi-project builds.”
  • Lage (by Microsoft): “Task runner in JS monorepos”
  • Lerna: “A tool for managing JavaScript projects with multiple packages.”
  • Nx (by Nrwl): “Next generation build system with first class monorepo support and powerful integrations.”
  • Rush (by Microsoft): “Geared for large monorepos with lots of teams and projects. Part of the Rush Stack family of projects.”
  • Turborepo (by Vercel): “The high-performance build system for JavaScript & TypeScript codebases.”

4 yorum

 
kleinstein 2022-03-02

Uygulama geliştirip her müşteri şirketine ayrı ayrı kurunca,

bazı müşteriler artık yükseltme istemeyebiliyor,

bazı müşteriler ise kendilerine özel bir sürüm talep edebiliyor.

Böyle müşteriler arttıkça,
sonunda repository onlarca müşteriye özel sürüm branch'i ile dolup taşıyor.
Her branch'te birbirinden biraz farklı sürümler bulunuyor.

Böyle bir durumda Monorepo hakkında yazıları görünce... gerçekten rüya gibi geliyor. haha

 
bbulbum 2022-02-28

Torvalds’ın çoğu durumda paylaşılan kütüphanelerin iyi bir fikir olmadığını söylediği aklıma geliyor.. Son zamanlarda uygulamaya çalışıyorum ama düşündüğümden daha az gerçekten paylaşılabilir kısım var ve build sisteminin dolaşması da büyük bir sorun olduğu için, monorepo’nun beklendiği kadar ideal bir sistem olmadığını düşünüyorum..

 
galadbran 2022-02-28

Subversion'ın baskın olduğu dönemde bu, son derece doğal bir şeydi; bu yüzden şimdi bunun biraz ironik gelmesi bana sık sık düşündürüyor.
Bunun yalnızca frontend geliştirmeyle sınırlı şekilde ele alınması da bana tuhaf geliyor.
MS, Git'i de Subversion gibi kullanabilmek için bir sanal dosya sistemi oluşturmuştu ama bunun yaygınlaşmaması üzücü.

 
xguru 2022-02-28

Son zamanlarda bakınca, teknolojinin dönüp dolaşıp geri gelme hissi daha da güçleniyor gibi. “Ee, bu eskiden pek iyi olmayan o şey değil mi?” diye düşündüğüm zamanlar oluyor... galiba fazla uzun süre yuvarlandım. Hıçkırık.