Muhtemelen şöyle bir şey var:
"typescript":"~2.1.6"
senin içinde package.json
hangi durumda varlık içinde, son alt sürümüne güncellemelerini NPM2.4.1
Düzenleme: OP'den soru
Ancak bu "npm install" in neden kilit dosyasını değiştireceğini açıklamaz. Kilit dosyası yeniden oluşturulabilir bir yapı oluşturmak anlamına gelmiyor mu? Öyleyse, semver değerinden bağımsız olarak, yine de aynı 2.1.6 sürümünü kullanmalıdır.
Cevap:
Bu, tam bağımlılık ağacınızı kilitlemek için tasarlanmıştır. Diyelim ki typescript v2.4.1
gerektirir widget ~v1.0.0
. Ne zaman npm yüklemek zaman kapmak widget v1.0.0
. Daha sonra geliştirici (veya CI derlemesi) npm kurulumu yapar ve alır typescript v2.4.1
ancak widget
güncellendi widget v1.0.1
. Artık düğüm modülünüz senkronize değil. Bunu package-lock.json
engelleyen budur.
Veya daha genel olarak:
Örnek olarak,
paket A:
{"name": "A", "version": "0.1.0", "bağımlılıklar": {"B": "<0.1.0"}}
paket B:
{"name": "B", "version": "0.0.1", "bağımlılıklar": {"C": "<0.1.0"}}
ve paket C:
{"ad": "C", "sürüm": "0.0.1"}
Bunlar kayıt defterinde bulunan A, B ve C'nin yalnızca sürümleri ise, normal bir npm yükleme A yüklenir:
A@0.1.0 - B@0.0.1 - C@0.0.1
Ancak, B@0.0.2 yayınlanmışsa, yeni bir npm kurulumu A yüklenecektir:
A@0.1.0 - B@0.0.2 - C@0.0.1 yeni versiyonun B'nin bağımlılıklarını değiştirmediğini varsayarsak. Elbette, B'nin yeni sürümü C'nin yeni bir sürümünü ve herhangi bir sayıda yeni bağımlılığı içerebilir. Bu tür değişiklikler istenmezse, A'nın yazarı B@0.0.1'e bir bağımlılık belirtebilir. Ancak, A'nın yazarı ve B'nin yazarı aynı kişi değilse, A'nın yazarının, B hiç değişmediği zaman C'nin yeni yayınlanan sürümlerini çekmek istemediğini söylemesinin bir yolu yoktur.
OP Soru 2: Doğru anladığımı göreyim. Söylediğiniz şey, kilit dosyasının ikincil bağımlılıkların sürümlerini belirtmesidir, ancak yine de üst düzey bağımlılıkları belirlemek için package.json'un bulanık eşleşmesine dayanır. Bu doğru mu?
Cevap: Hayır. Package-lock, tanımlanan kök paketleri de dahil olmak üzere tüm paket ağacını kilitler package.json
. Eğer typescript
kilitli 2.4.1
Gözlerinde farklı package-lock.json
o değiştirilene kadar, bu şekilde kalmalıdır. Ve diyelim yarın typescript
sürüm yayınlanacak 2.4.2
. npm install
Şubenizi kontrol edip çalıştırırsam , npm kilit dosyasına saygı duyar ve yükler 2.4.1
.
Daha fazlası package-lock.json
:
package-lock.json, npm'nin node_modules ağacını veya package.json dosyasını değiştirdiği tüm işlemler için otomatik olarak oluşturulur. Oluşturulan tam ağacı açıklar, böylece sonraki yüklemeler ara bağımlılık güncellemelerinden bağımsız olarak aynı ağaçları üretebilir.
Bu dosya kaynak depolarına ayrılmak üzere tasarlanmıştır ve çeşitli amaçlara hizmet eder:
Bir bağımlılık ağacının tek bir temsilini açıklayın, böylece takım arkadaşları, konuşlandırmalar ve sürekli entegrasyon tam olarak aynı bağımlılıkları kuracak.
Kullanıcılara, dizinin kendisini işlemek zorunda kalmadan önceki node_modules durumlarına "zaman yolculuğu" yapma olanağı sağlayın.
Okunabilir kaynak kontrol farkları ile ağaç değişikliklerinin daha iyi görünmesini kolaylaştırmak için.
Ve npm'in önceden yüklenmiş paketler için tekrarlanan meta veri çözünürlüklerini atlamasına izin vererek kurulum işlemini optimize edin.
https://docs.npmjs.com/files/package-lock.json