Lerna ile çoklu paket deposu | sıcak çevrimiçi



  1. Lerna ile çoklu paket deposu

Node.js’deki temel tasarım ilkelerinden biri, kodu “küçük güzeldir” sloganına sadık kalarak mümkün olan en küçük yeniden kullanılabilir paketlerde yapılandırmaktır. Bununla birlikte, daha karmaşık projelerde, her paket için ayrı bir Git deposu tutmanız gerekirse, bu durum hızla kafa karıştırıcı hale gelebilir. “Lerna” aracı bir çare vaat ediyor.


Node.js altında veya genel olarak JavaScript’te karmaşık bir proje geliştirirseniz ve kodunuzu birçok küçük pakette yukarıdaki mottoya göre yapılandırırsanız, kısa sürede 50, 100 veya daha fazla paket elde edersiniz. Her birini kendi Git deposunda tutarsanız, bu hızla birçok yapılandırma çalışmasına dönüşür: ister aralarındaki bağımlılıkları yönetin, ister oluşturma süreçlerini düzenleyin veya npm’ye dağıtımı kontrol edin.

Bu nedenlerden dolayı, Angular, React, Meteor ve Ember gibi iyi bilinen çerçevelerin veya Babel ve Jest gibi iyi bilinen araçların geliştiricileri artık kodlarını sözde monorepository, monorepos veya kısaca multi-package repository olarak yapılandırmaktadır. Fikir: Her paketi kendi Git deposunda tutmak yerine, birbirine ait olan paketler tek bir havuzda gruplanır.

Avantajları açıktır: Bir yandan, birden çok Git deposunu yönetmenize gerek yoktur, diğer yandan, tüm modüller için oluşturma süreci büyük ölçüde basitleştirilebilir ve birazdan göreceğimiz gibi, npm kayıt defteri de. Buna yardımcı olan bir araç Lerna’dır.

Kurulum


Başlangıçta Babel’in bir parçası olan Lerna, artık bağımsız bir Node.js paketidir ve her zamanki gibi npm paket yöneticisi aracılığıyla küresel bir bağımlılık olarak kurulabilir:

$ npm install -g lerna

Araç daha sonra komutla kullanılabilir öğrenme mevcut bir dizi farklı parametre ile çağrılabilir:


  • ilk: Çoklu paket deposunu başlatma
  • önyükleme: Tüm paket bağımlılıklarını yükleme
  • yayımlamak: Tüm paketleri npm’de yayınla
  • güncellenmiş: Son sürümden bu yana hangi paketlerin değiştiğini kontrol edin
  • içe aktarmak: Harici bir depodan bir paketi içe aktarın
  • temiz: Hepsini kaldır düğüm_modülleri-Tüm paketlerdeki dizinler
  • fark: Paketlerin önceki sürümle karşılaştırılması
  • koşmak: Her pakette bir npm betiği çalıştırma
  • yönetici: Her pakette bir komut satırı komutu çalıştırın
  • ls: Tüm modülleri listele
Başlatma ve yapı


Bir çoklu paket deposu, esasen yapısı ve iki genel yapılandırma dosyası tarafından tanımlanır: bir yandan, bir paket.jsontüm yönetilen paketler için meta bilgileri içeren bir dosya ve adlı bir yapılandırma dosyası aracılığıyla öğrena.json, bu da Lernaean’a özgü meta bilgileri içerir. Bireysel paketler, sırasıyla, varsayılan olarak adlandırılmış bir alt dizinde depolanır. paketler genel yapı şöyle görünecek şekilde sıralandı:

multirepo/
node_modules/
packages/
package1/
node_modules/
src/
index.js
package.json
package2/
package3/
package4/
package5/
package6/
package.json
lerna.json

Bu yapıyı manuel olarak oluşturabilirsiniz. Alternatif olarak, yukarıda bahsedildiği gibi, komut da mevcuttur. başlangıç öğren en az iki yapılandırma dosyasını otomatik olarak oluşturan kullanılabilir:

$ git init multirepo
$ cd multirepo
$ lerna init

Sonuç olarak, Lerna modülü şuna bağımlı hale gelir: paket.json-Dosya eklendi (eğer zaten orada değilse) ve diğer yandan yapılandırma dosyası öğrena.json oluşturuldu. Başlangıçta, dosya şöyle görünür ve kullanılan Lerna kitaplığının sürüm numarasını, paketlerin bulunduğu dizinin bir göstergesini ve genel olarak tüm paketler için geçerli olan bir sürüm numarasını içerir. Burada başka hangi yapılandırma seçeneklerinin bulunduğunu öğrenmenin en iyi yolu resmi belgelere başvurmaktır.

{
"lerna": "2.0.0-beta.38",
"packages": [
"packages/*"
],
"version": "0.0.0"
}

Çoklu paket deposundaki her paketin yapısı, tek paket deposu olarak yönetilen bir paketten farklı değildir. Bu, örneğin, her paketin hala kendine ait olduğu anlamına gelir. paket.jsonfile ve örneğin bağımlılıklarını tanımlamak için kullanır.

Ancak, yalnızca geliştirme sırasında gerekli olan bağımlılıklar için (“devDependencies” girişi paket.json) çoğu durumda onları küresel hale getirmek mantıklıdır. paket.json çoklu paket deposu.

Bunun birkaç avantajı vardır: Bir yandan, tüm paketlerin kullanılan bir bağımlılığın aynı sürümüne sahip olmasını sağlar. Öte yandan, bu hem kurulum süresini hem de ilgili bağımlılık için kullanılan depolama alanını azaltır, çünkü – mantıksal olarak – tüm paketler için yalnızca bir kez kurulur (hatta her paket için bile değil).

Önyükleme ve dağıtım


Diğer bir yararlı komut ise önyükleme öğrenmek. Bu, tüm paket bağımlılıklarının yüklenmesini sağlar. Başka bir deyişle: Lerna her paket için komutu çağırır. npm kurulumu son. Ancak sadece bu da değil: çoklu paket havuzundaki tüm paketler için havuzdaki başka bir paketin bağımlılığı olarak kullanılan sembolik bağlantılar oluşturulur ve Node.js geliştiricilerinin onayladığı gibi geliştirme sırasında çok yardımcı olur. Son olarak, her paket için komut npm ön yayın çağrıldı, içeri girmesine neden oldu paket.json“prepublish” betikleri adı verilen dosyalar yürütülür.

Bir Lerna zaten bu noktaya kadar sizden çok fazla iş aldıysa, dağıtım veya yayınlama söz konusu olduğunda daha da iyi hale gelir. Komuta yayınlamayı öğren son sürümden bu yana değişen tüm paketler için sürüm numarasının buna göre artırılmasını sağlar. Bunun bir “yama”, “küçük değişiklik”, “büyük değişiklik” veya “özel değişiklik” olup olmadığını seçmek için küçük bir komut satırı iletişim kutusu kullanılabilir (güzel: yeni sürüm, ilgili görüntülenen seçimden sonra parantez içinde gösterilir) ).

Ama sadece o değil: yayınlamayı öğren ayrıca Git’te yeni sürüm için uygun etiketlerin ve taahhütlerin oluşturulmasını ve tüm paketlerin npm’de ayrı ayrı yayınlanmasını sağlar.

Çözüm


Lerna kitaplığı, birkaç ilgili paketten oluşan karmaşık JavaScript projelerinin izlenmesine yardımcı olur: oluşturma sürecinin yapılandırmasını, Git aracılığıyla yönetimi ve npm kayıt defterine yayınlamayı basitleştirir. Bir öneri olarak, karmaşık projelerle veya karmaşık bir paket/havuz yapısıyla “mücadele etmesi” gereken herhangi bir Node.js geliştiricisi bu fırsatı değerlendirmelidir. Geçiş yapmaya değer olabilir.


()



Haberin Sonu
 
Üst