İplik.lock ve package-lock.json dosyalarını işlemeli miyim?


Yanıtlar:


149

Her zaman genel olarak bağımlılık kilidi dosyalarını işle

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.lockvepackage-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.lockveyapackage-lock.json hangi paket yöneticisini kullandığınıza bağlı olarak taahhüt etmelisiniz .

Hem iplik.lock hem de package-lock.json işlemeli misiniz?

Ş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.jsonsize 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.lockveya package-lock.jsonher 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.lockve package-lock.jsonher 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 importkomut getirmiştir . Bu, iki dosyayı senkronize tutmak için yararlı olabilir. (Teşekkürler @weakish)yarn.lockpackage-lock.json


Bu konular, Yarn projesinde aşağıda tartışılmıştır:

Artık ikisi de kapalıdır.


1
Mükemmel cevap. Bununla birlikte, amacınıza göre: "Yapılacak en güvenli şey, bağımlılıklarınız her değiştiğinde ikisini de oluşturmak ve işlemek olacaktır." Bunun neden yapılacak "en güvenli" şey olduğundan emin değilim. Bahsettiğiniz gibi, büyük olasılıkla "iki dosya senkronize olmayabilir". @ crimbo'nun cevabı bu sorunu daha ayrıntılı olarak açıklıyor.
TachyonVortex

Sanırım bu, projenizi yürüten tüm insanları kontrol edip etmediğinizde bir fark olabilir. Ekibe sahipseniz, Elbette İpliği standartlaştırın ve iplik ipliği kullanın. Ancak bu açık kaynaklı bir projeyse (bizimki gibi), siz İplik'i dahili olarak kullansanız bile insanlar projelerinizde NPM kullanıyor olabilir. Dolayısıyla, yapılması gereken en güvenli şey, hem iplik.lock hem de package-lock.json'un senkronize kalmasını sağlamak için otomatik bir sistem kullanmak olacaktır. Ayrıca, package-lock.json'a geçmesi için Yarn'a baskı uygulayın.
Robin Winslow


18

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.

İpliği standardize ediyorsanız, iplik.lock'un neden yapılması gerektiğine dair iplik makalesi burada.

Hem yarn.lockdosyayı 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.lockiç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.lockve arasındaki farkları da açıklamaktadır package-lock.json.


11

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 installprojeniz, bir sürüm olması mümkündür 1.2.4ait Aserbest bırakıldı. Sizin belirlediğiniz semver aralığını karşılayan en son sürüm olduğu package.jsoniç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.jsondosya 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.jsondosyayı 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.jsonaçıkça faydasızdır. Dahası, can sıkıcı olabilir.


7

İş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.


Bağlantı koptu.
Juha Syrjälä

Teşekkürler @ JuhaSyrjälä. Makaleye ikinci bir bağlantı ekledim.
ravinggenius

Npm veya iplik için göz ardı edilen liste nerede?
neves

"yok sayma listesi" projenizin kaynak deposuna özel olacaktır (git, mercurial, Subversion). Git durumunda, dosya çağrılır .gitignoreve genellikle projenin kökünde bulunur.
ravinggenius

4

Haklısın! İkisine de izin vermek npmve yarnkullanmak sorunlara neden olacaktır. Bu makaleye bir göz atın .

Şu anda, paketleri kurmak için aynı depoyu kullanan yarn ve npmaynı depoyu kullanan kullanıcılara bazı uyarılar eklemeyi planlıyoruz .

package-lock.jsonGelecekteki 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 npmve yarnpaket yöneticisi olarak.


2

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.jsonbu bir nedenle (ı, örneğin, iplik kullanmayın) sahiptir taahhüt edilecek.

Bunun için, yarn.lockyalnı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.lockve package-json.lockyerine kullanacak , bu sefer daha basit hale gelecek 😛


1
İplik kilidi kullanmayı bırakmadı.
jayarjo

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.