Tüm deterministik pkg kurulumlarımız için iplik kullanıyoruz, ancak kullanıcının npm kullanmasını engellemiyoruz - ancak bu dosyaların ikisine de sahip olmanın sorunlara neden olacağını tahmin ediyorum. .Gitignore dizininize bir tane eklenmeli mi?
Tüm deterministik pkg kurulumlarımız için iplik kullanıyoruz, ancak kullanıcının npm kullanmasını engellemiyoruz - ancak bu dosyaların ikisine de sahip olmanın sorunlara neden olacağını tahmin ediyorum. .Gitignore dizininize bir tane eklenmeli mi?
Yanıtlar:
Gibi bir örtülü , başka yerde birçok paket yönetim sistemleri tarafından desteklenen bağımlılık kilit dosyaları, (örneğin: besteci ve paketleyici ), sonu zincirinde projelerinde kod temeli kararlı olmalıdır - bu yüzden her o projeyi çalıştırmaya çalışırken bunu yapıyor böylece ile tam olarak bağımlılıkları test seti.
Kilit dosyalarının her zaman diğer projelere dahil edilmesi amaçlanan paketlere işlenmesi gerekip gerekmediği (daha gevşek bağımlılıkların istendiği durumlarda) daha az açıktır. Bununla birlikte, hem İplik hem de NPM (@Cyrille kapsamında) akıllıca yok sayar yarn.lock
vepackage-lock.json
gerektiğinde sırasıyla bu kilit dosyalarını her zaman güvenli hale getirir.
Bu nedenle her zaman en az birini yarn.lock
veyapackage-lock.json
hangi paket yöneticisini kullandığınıza bağlı olarak taahhüt etmelisiniz .
Şu anda biz yüklemek hem iki farklı paket yönetim sistemleri var bağımlılıkları aynı seti gelen package.json
, ancak ürettiğini ve iki farklı kilit dosyaları okuma. NPM 5 üretirken package-lock.json
, İplik üretir yarn.lock
.
Eğer işlersen package-lock.json
size taahhüt Eğer NPM 5. ile bağımlılıkları yükleme insanlar için destek inşa ediyoruz ardından yarn.lock
İplik ile bağımlılıkları yükleme insanlar için destek Sen bina.
Taahhüt etmeyi yarn.lock
veya package-lock.json
her ikisini birden seçip seçmemeniz , projenizde geliştirenlerin sadece İplik veya NPM 5 veya her ikisini de kullanıp kullanmadığına bağlıdır. Projeniz açık kaynaklı ise, yapılacak en topluluk dostu şey muhtemelen her ikisini de taahhüt etmek yarn.lock
ve package-lock.json
her zaman senkronize olmasını sağlamak ve her zaman senkronize olmak için otomatik bir sürece sahip olmak olacaktır .
Güncelleme: Yarn artık bir dosyadan bir dosya oluşturacak bir import
komut getirmiştir . Bu, iki dosyayı senkronize tutmak için yararlı olabilir. (Teşekkürler @weakish)yarn.lock
package-lock.json
Bu konular, Yarn projesinde aşağıda tartışılmıştır:
Artık ikisi de kapalıdır.
1 bağımlılık ağacı kilit dosyası işlemelisiniz, ancak ikisini birden işlememelisiniz. Bu aynı zamanda bir proje oluşturmak + geliştirmek için iplik veya npm (her ikisi birden değil) üzerinde standardizasyon gerektirir.
Hem yarn.lock
dosyayı hem de dosyaları teslim ederseniz package-lock.json
, 2 dosyanın farklı bağımlılık ağaçları sağlayabilmesinin birçok yolu vardır (iplik ve npm'nin ağaç çözünürlük algoritmaları aynı olsa bile) ve bunların tam olarak aynı cevap. Önemsiz olmadığından, aynı bağımlılık ağacının her iki dosyada da sürdürülmesi olası değildir ve yapının iplik veya npm kullanılarak yapılmasına bağlı olarak farklı davranışlar istemezsiniz.
Eğer ve iplik kullanarak geçer zaman yarn.lock
için package-lock.json
( burada konuyla ), sonra işlemeye kilit dosyasının seçimi kolay hale gelir ve artık iplik ve farklı kurar sonuçlanan NPM hakkında endişe var. Bu blog gönderisine göre , bu yakında beklemememiz gereken bir değişikliktir (blog yazısı ayrıca yarn.lock
ve arasındaki farkları da açıklamaktadır package-lock.json
.
Ben de aynı soruyu düşünüyordum. İşte düşüncelerim, umarım yardımcı olur:
Npm paket lock.json dokümantasyon aşağıdakileri diyor ki:
package-lock.json, npm'nin node_modules ağacını veya package.json'u değiştirdiği tüm işlemler için otomatik olarak oluşturulur. Sonraki yüklemelerin ara bağımlılık güncellemelerinden bağımsız olarak aynı ağaçları üretebilmesi için oluşturulan tam ağacı açıklar.
Bu harika çünkü "makinemde çalışıyor" etkisini engelliyor.
Bu dosya olmadan, eğer siz npm install --save A
, npm "A": "^1.2.3"
sizin package.json
. Başkasının çalıştığında npm install
projeniz, bir sürüm olması mümkündür 1.2.4
ait A
serbest bırakıldı. Sizin belirlediğiniz semver aralığını karşılayan en son sürüm olduğu package.json
için bu sürümü kuracaktır. Peki ya bu sürümde yeni bir hata ortaya çıkarsa? Bu kişi, herhangi bir hata olmadan önceki sürüme sahip olduğunuz için yeniden üretemeyeceğiniz bir soruna sahip olacak.
Dizininizin durumunu düzelterek node_modules
, package-lock.json
dosya bu sorunu önler çünkü herkes her paketin aynı sürümlerine sahip olacaktır.
Peki ya bir npm modülü yazıyor ve yayınlıyorsanız? Belgeler şunları söylüyor:
Package-lock.json ile ilgili önemli bir ayrıntı, yayınlanamaması ve üst düzey paket dışında herhangi bir yerde bulunursa yok sayılacağıdır.
Yani, bunu taahhüt etseniz bile, kullanıcı modülünüzü kurduğunda package-lock.json
dosyayı almayacak , sadece dosyayı alacaktır package.json
. Bu nedenle npm, tüm bağımlılıklarınızın dönem aralıklarını karşılayan en son sürümü yükleyecektir. Bu, modülünüzü yazmaya başladığınızda yüklediğinizle değil, bağımlılıklarınızın bu sürümleriyle her zaman test etmek istediğiniz anlamına gelir. Yani, bu durumda, package-lock.json
açıkça faydasızdır. Dahası, can sıkıcı olabilir.
İşte benim temel kuralım: Bir uygulama üzerinde çalışıyorsanız, kilit dosyalarını işleyin. Bir kitaplık tutuyorsanız, onu göz ardı edilenler listenize ekleyin. Her iki durumda da doğru semver aralıklarını kullanmalısınız package.json
. Yehuda Katz ( önbelleğe alınmış ), ne zaman işleneceği Gemfile.lock
(Ruby'nin kilit dosyası) ve ne zaman yapılmayacağı konusunda harika bir açıklama yazdı . En azından tl; dr bölümünü okuyun.
.gitignore
ve genellikle projenin kökünde bulunur.
Haklısın! İkisine de izin vermek npm
ve yarn
kullanmak sorunlara neden olacaktır. Bu makaleye bir göz atın .
Şu anda, paketleri kurmak için aynı depoyu kullanan
yarn
venpm
aynı depoyu kullanan kullanıcılara bazı uyarılar eklemeyi planlıyoruz .
package-lock.json
Gelecekteki karışıklıkları ve olası tutarlılık sorunlarını önlemek için ipliği kullanmaya karar verirseniz dosyayı silmenizi şiddetle tavsiye ederiz .
Her iki istemeyebilir npm
ve yarn
paket yöneticisi olarak.
Bu dosyalar sizin araçlarınız tarafından yönetilir, bu yüzden - iplik kullanımının etkin bir şekilde güncelleneceğini varsayarsak package-lock.json
- Sanırım her iki dosyayı da işlemek iyi çalışır.
Ben senin kullanıcı için en önemli olduğunu düşünüyorum package-lock.json
bu bir nedenle (ı, örneğin, iplik kullanmayın) sahiptir taahhüt edilecek.
Bunun için, yarn.lock
yalnız mı yoksa takım halinde mi çalıştığınıza bağlı. Solo ise, sanırım bunu taahhüt etmeye gerek yok. Bir takımda çalışmayı planlıyorsanız (planlıyorsanız), o zaman muhtemelen en azından iplik onu destekleyene kadar taahhüt etmelisiniz 🙂
Sanırım iplik ekibi sonunda kullanmayı bırakacak yarn.lock
ve package-json.lock
yerine kullanacak , bu sefer daha basit hale gelecek 😛
Hayır, her iki kilit dosyasını aynı anda kullanmak, özellikle bir ekipte işbirliği yaparken, çoğunlukla bağımlılık ağacınızda tutarsızlıklara neden olur. Bir kilidi veya diğerini görmezden gelmek basit bir çözümdür. Ekibinizin bu değişikliği anladığından ve kabul ettiğinden emin olun.