İçeriğe geç
Cervus Core
DevOps & Altyapı

pnpm monorepo'ya neden geçtim

· 1 dk okuma

  • pnpm
  • monorepo
  • araclar
apps ve packages klasörleri arasındaki bağımlılık okunu gösteren basit bir kutu diyagramı.

Tek bir uygulamayla başlayabilecekken neden baştan bir çalışma alanı (workspace) kurduğumu soralım.

Paylaşılan sınırlar

İçerik şeması (content-schema), paylaşılan bileşenler (ui) ve yapılandırma (config) ayrı paketler olarak duruyor. Bunun kolaylaştırdığı şey şu: bir şemayı değiştirdiğimde onu kullanan her yer aynı paketten okuyor, kopyala-yapıştır sürümü diye bir şey yok.

| Klasör adı | İçeriği | Kim kullanıyor | | ------------------------- | --------------------------------- | -------------------- | | apps/web | Next.js sitesi | Son kullanıcı | | packages/content-schema | Zod şemaları, doğrulama betiği | apps/web, betikler | | packages/ui | Paylaşılan bileşenler | apps/web | | packages/config | tsconfig, ESLint, jeton kuralları | Tüm paketler |

pnpm neden, npm/yarn değil

İki somut gerekçe: sabit bağımlılık yönetimi (aynı paketin iki farklı sürümü sessizce karışmıyor) ve disk alanı verimliliği (paketler bir kere indirilip sembolik bağlantıyla paylaşılıyor, her paket kendi kopyasını tutmuyor).

Tek uygulama

  • Bağımlılık paylaşımı: yok
  • Sürümleme: tek `package.json`
  • Yeni paket eklemek: yeniden yapılandırma

Monorepo

  • Bağımlılık paylaşımı: `workspace:*` ile doğrudan
  • Sürümleme: paket başına bağımsız
  • Yeni paket eklemek: klasör açmak kadar ucuz

Bugün aşırı mühendislik gibi görünse de

Bu yapı tek bir Next.js uygulaması için gereğinden fazla görünebilir — ve bu gözlem doğru. Ama ileride bir API eklendiğinde apps/api açmak bir klasör açmaktan ibaret olacak, yeniden yazım gerekmeyecek. Bugünkü maliyeti neredeyse sıfır: birkaç yapılandırma dosyası.

Kapanış

Monorepo kararını "büyüyeceğiz" varsayımıyla değil, "büyürsek pahalı olmasın" tedbiriyle verdim. İkisi farklı gerekçeler; birincisi tahmin, ikincisi sigorta.

Abdullah Balat

Kurucu ve geliştirici

Bu siteyi kuran, tasarlayan ve içeriğini yazan kişiyim. Hakkımda daha fazlası →

Yorumlar

Yakında

Yorum alanı henüz aktif değil; GitHub Discussions tabanlı bir sistem hazırlanıyor.

Bülten

Yakında

Yeni yazı ve ders yayınlandığında haber vermek için bir bülten hazırlıyorum. Kayıt formu şu an pasif; aktif olduğunda burada duyurulacak.