2017-05-31 17 views

cevap

5

Ana fark, kilit dosyalarının iç içe bağımlılıkları da kilitlediğidir - bağımlılıklarınızın tüm bağımlılıkları vb. Tüm bu değişiklikleri yönetmek ve izlemek inanılmaz derecede zor olabilir ve kullanılan paketlerin sayısı katlanarak büyüyebilir. sırasıyla ~1.0.0 ve ~2.0.0 de foo belirtmek 2 kütüphaneleri düşünün -

da el bir paketin belirli bir versiyonu kullanılması gerektiğini belirtmek olamaz durumlar vardır. Büyük sürümdeki fark, foo @ v1 API'sının foo @ v2 API'sı ile eşleşmeyeceğini, dolayısıyla uygulama düzeyinizdeki paket sürümünü çakışmalara ve hatalara neden olmadan geçersiz kılmanın bir yolu olmadığını söyler.

Son olarak, "neden bu kadar yarıçap var?" Diye merak ediyor olabilirsiniz. Neden tüm paketler bağımlılıklarının tam sürümünü manuel olarak belirlemelidir? " Semverin ana avantajlarından biri, bir alt bağımlılık güncellendiğinde ağaçtaki her bağımlılığı güncellemeniz gerekmediği anlamına gelir. foo ve foo güveniyorsa ve bar ve bar yalnızca yamalı bir kritik hataya sahip olsaydı ve her şey için tam sürümleri kullanıyoruz, daha sonra düzeltmeyi yapabilmemiz için önce foo güncelleştirilmelidir. Eğer foo ve bar farklı bakıcılara sahipse veya foo terkedildiyse, bu biraz zaman alabilir ve projeyi (Java-arazisinde bir kereden fazla yaptığım bir şey) çatallamam gerekebilir. Bu, kütüphanelerin ekosistemlerini korumak için çok yararlıdır, çünkü bağımlılık ağacında düğüm başına gerekli olan bakım işini temelde azaltarak kütüphaneleri ve desenleri çıkarmayı kolaylaştırır. Bir zamanlar, tam sürümleri kullanan bir bileşen kitaplığı oluşturduğumuz ve paylaşılan işlevselliği içeren çekirdek kitaplığın güncelleştirildiği erken bir projem vardı; bu sürümü güncellemek için diğer paketlerin her'a bir PR göndermesi gerekiyordu ve bazen numaralı'a bağlı bileşenlere PR'leri takip eder. Söylemeye gerek yok, birkaç ay sonra paketleri birleştirdik.

Bu yardımcı olur umarım!

+0

Harika bir açıklama, teşekkürler! – user2061057

+0

İkinci paragrafınızı takip ettiğimden emin değilim. NPM'de, her modül 'bağımlılık ağacına sahip değil midir?' Başka bir deyişle, NPM Tamam, geçişli bir bağımlılığın 2 çelişen versiyonuyla değil, çünkü onları ayrı tutar mı? – jrahhali

+0

Evet, ancak 2 paket aynı bağımlılığı paylaşıyorsa, npm bu depomuzu node_modules öğesinin üst düzeyinde yalnızca bir kez yükleyebilir. https://docs.npmjs.com/how-npm-works/npm3-nondet Bu doc, npm3 içindir ancak yine de geçerlidir. – user2301179

İlgili konular