Zephyrnet Logosu

Ledger Live Monorepo Projesi: Bölüm 2 – Araçlar (Parlamasını Sağlayın) | Defter

Tarih:

Bir Ledger geliştiricisinin bize Ledger Live kod tabanının mono depoya devasa geçiş hikayesini anlattığı "Ledger Live Monorepo Projesi" blog yazıları serisinin ikinci girişi. 1. bölümü kaçırdıysanız buradan göz atın:

Monorepo mimarisinin geçerli bir çözüm olduğunu belirledikten sonra planımızı uygulamaya koymak için mevcut araçları araştırmaya başladık.

Birden fazla projeyi yönetme

Ledger Live ekibi olarak JavaScript ekosisteminde geziniyoruz ve bizim için şans eseri, paket yöneticimizle birden fazla projeyi yönetmenin çeşitli yollarını zaten biliyorduk. Bu olası çözümlerden bazıları şunlardır:

  • NPM (çalışma alanları desteği var ancak daha iyi alternatifler var),
  • İplik 1 (çok eski, daha iyi ve daha verimli alternatifler haline geliyor),
  • İplik ≥ 2 (ilginç bir fikir, ancak tak ve çalıştır her yerde, özellikle de React Native'de pek desteklenmiyor),
  • PNPM (sembolik bağlantılar, çalışma alanları göz önünde bulundurularak oluşturulmuştur, disk açısından verimlidir).

Bütün bunlara baktıktan sonra gitmeye karar verdik. PNPM için:

  • disk verimliliği (sanal bir ağ kullanır) mağaza ve sembolik bağlar, yani paketler yalnızca bir kez indirilir ve daha sonra sanal mağazadan node_modules'ınıza sembolik olarak bağlanır),
  • hız (paketler önbelleğe alındığından sonraki kurulumlar çok daha hızlıdır),
  • çalışma alanları/monorepo mimarisi (takma adlar, orkestrasyon vb.) için yerleşik destek.

Kağıtta PNPM mutlak bir mücevher, ancak sembolik bağlantıların doğru şekilde kurulması biraz tuhaftı (yine, özellikle React Native ile).

Tamam, yani seçimimiz yapıldı, biz de gidecektik PNPM.

Komut Dosyası Düzenlemesi

Rağmen PNPM Özelliklerine giderek daha fazla orkestrasyon eklese de hâlâ yapmak istediğimiz her şeyi kapsamıyor, örneğin:

  • sıralı yapılar,
  • Önbelleğe almak.

Bunlar için göz atmamız gereken iki ilginç yarışmacı bulduk:

  • NX (açısal ekip tarafından),
  • türborepo (üzerinde çalışmaya başladığımızda v1.0.0'ı duyurduk ve şu anda Vercel ekibiyle çalışıyoruz).

Her ikisinde de kavram kanıtı yaptık.

NX çok daha fazla özelliği, jeneratörleri, otomasyonu, harika bağımlılık grafikleri vs. vardı… ama çok fazla yük katıyordu ve oldukça inatçı olduğu için onların kurallarına uymak zorunda kalacaktık.

türborepo Öte yandan, oldukça basit bir özelliktir. Ancak ihtiyaç duyulduğunda çok hızlı bir şekilde değiştirebileceğimiz kullanışlı bir tak ve çalıştır çözümüdür.

Rağmen türborepo olduğundan daha az özelliğe sahipti NX, aradığımız 2 şeyi yaptı:

  • Yapıların bağımlılık ağacına (ve eşzamanlı yapılara) göre düzenlenmesi,
  • Önbelleğe alma (derlemeler önbelleğe alınır ve kodları değişmediyse 'tekrar oynatılır').

Buna ek olarak kolay giriş/çıkış bloktaki yeni çocuğu seçmemize neden oldu. TurboRepo.

Sürüm

Biz de çeşitli çözümlere baktık ama sonunda kullanmaya karar verdik. https://github.com/changesets/changesets TurboRepo'nun önerdiği bir araç olduğundan ve biraz dokümantasyon okuduktan sonra ihtiyaçlarımıza uygun görünüyordu.

Geliştiricilerin geliştirme akışlarında biraz daha titiz olmaları ve changesets (kodlarının hangi kütüphanede değiştiğini açıklayan dosya, aşağıdaki önem derecesi ekmek sözleşme ve değişikliğin açıklaması). Bunlar changesets daha sonra paketlerin belirli önem derecelerine göre sürümünü otomatik olarak yükseltmek ve aynı zamanda paketlerin oluşturulmasını otomatikleştirmek için kullanılır. yapılan değişiklikler. Bunun da ötesinde, araçlar şunları sağlar: pre release modu, 🍰 üzerindeki 🍒.

Sıradaki ne ?

Aletlere karar verdikten sonra çalışmaya başlama zamanı gelmişti. Bir sonraki blog yazımızda build sistemi ve mono repository bağlamında tüm dev-ops/otomasyon/sürekli entegrasyondan bahsedeceğiz.


Valentin DE ALMEIDA
Geliştirici Deneyimi ve Temel Teknoloji – Ledger Live

spot_img

En Son İstihbarat

spot_img