npm @ 5 yayınlandı, beni şaşırtan yeni bir package-lock.json özelliği (sonra npm install
) var. Bilmek istiyorum, bu dosyanın etkisi nedir?
npm @ 5 yayınlandı, beni şaşırtan yeni bir package-lock.json özelliği (sonra npm install
) var. Bilmek istiyorum, bu dosyanın etkisi nedir?
Yanıtlar:
Package.json gibi yıldızlı sürümleri kullanmak yerine tam, sürümlendirilmiş bir bağımlılık ağacı saklar (örneğin 1.0. *). Bu, diğer geliştiriciler veya ürün sürümleri vb. İçin bağımlılıkları garanti edebileceğiniz anlamına gelir. Ayrıca ağacı kilitlemek için bir mekanizmaya sahiptir, ancak package.json değişirse genellikle yeniden oluşturulur.
Gönderen npm docs :
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 şekilde garanti edilir.
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. "
Jrahhali'nin aşağıdaki paketi sadece paket.json'u tam sürüm numaralarıyla kullanma ile cevaplamak için Package.json öğesinin, bağımlılıklarınızın (bazen iç içe bağımlılıklar olarak da adlandırılır) bağımlılıklarını değil, yalnızca doğrudan bağımlılıklarınızı içerdiğini unutmayın. Bu, standart paket.json ile iç içe bağımlılıkların sürümlerini doğrudan denetleyemeyeceğiniz anlamına gelir, doğrudan veya eş bağımlılıkları olarak başvuruda bulunmanız, doğrudan bağımlılıklarınızın bu iç içe bağımlılıklar için tanımladığı sürüm toleransını da denetlemediğiniz için yardımcı olmaz. .
Doğrudan bağımlılıklarınızın sürümlerini kilitleseniz bile,% 100 tam bağımlılık ağacınızın her seferinde aynı olacağını garanti edemezsiniz. İkinci olarak, doğrudan bağımlılıklarınızın iç içe bağımlılıkların daha da az kontrolünü sağlayan kırılmaz değişikliklere (anlamsal sürümlere dayalı olarak) izin vermek isteyebilirsiniz, ayrıca doğrudan bağımlılıklarınızın bir noktada anlamsal sürüm oluşturma kurallarını bozmayacağını garanti edemezsiniz. kendilerini.
Tüm bunların çözümü, yukarıda açıklandığı gibi tam bağımlılık ağacının sürümlerinde kilitlenen kilit dosyasıdır. Bu, standart paketinizi kullanarak yeni bağımlılık sürümlerinin (doğrudan veya dolaylı) test edilmesine izin verirken diğer geliştiriciler veya sürümler için bağımlılık ağacınızı garanti etmenizi sağlar.
NB. Önceki shrink wrap json hemen hemen aynı şeyi yaptı, ancak kilit dosyası işlevi daha net olacak şekilde yeniden adlandırır. Projede zaten bir shrink wrap dosyası varsa, bu herhangi bir kilit dosyası yerine kullanılır.
package-lock.json
Dosya güncellenmektedir yüklemek npm diyoruz her seferinde NPM 5.1 beri. (değişim github.com/npm/npm/issues/16866 , örnek github.com/npm/npm/issues/17979 ) Dolayısıyla edebilir artık tüm geliştiriciler için aynı versiyonlarını ayarlamak için kullanılabilir Eğer tam sürümlerini belirtmedikçe, gibi 1.2.3
yerine 1.2.*
sizin de package.json
dosyaya.
npm ci
olarak npm install
ci içeriğini kullanır oysa paket lock.json güncelleyecektir. Sadece ile npm ci
tekrarlanabilir sağlam yapılar elde edersiniz.
Npm için çok önemli bir gelişme: her paketin tam olarak aynı sürümünü garanti edin .
Projenizin farklı ortamlarda aynı paketlerle farklı bir zamanda oluşturulduğundan nasıl emin olabilirsiniz? Diyelim diyelim sen kullanabilir ^1.2.3
Gözlerinde farklı package.json
veya bağımlılıkları bazı bu şekilde kullanıyor, ama nasıl u her zaman sağlayabilirsiniz npm install
senin dev makine ve derleme sunucusu aynı sürümünü alacak? package-lock.json bunu sağlayacaktır.
npm install
yapı sunucusunda veya dağıtım sunucusundayken kilit dosyasını yeniden oluşturur (kilit dosyasından npm ci
okuyacak ve tüm paket ağacını kuracaktır)
package-lock.json
dosyadan hiç okumuyor . Sadece eskiden olduğu package.json
gibi yüklenir . Make kullanımı için package-lock.json
dosyada, sen listelenen tam sürümlerini yükleyin edecek olan yeni "npm ci" komutunu kullanmak zorunda package-lock.json
yerine verilen versiyonu-aralıkların package.json
.
npm install
gelmez okunan package-lock.json
. Çoğaltmak için aşağıdakileri yapın. bu package.json npm install
dosyasını kullanarak {... "devDependencies": {"sinon": "7.2.2"}} Şimdi kopyalayıp yapıştırın package.json
ve package-lock.json
yeni bir dizine kopyalayın . Değiştir package.json
: "sinon": "^ 7.2.2" çalıştırın npm install
. npm package-lock.json dosyasından okur ve 7.3.0 yerine 7.2.2 yükler. Package-lock.json olmadan, 7.3.0 yüklenecekti.
package-lock.json
yapmanın tek makul yolu package-lock.json
onu kullanarak silmek ve yeniden oluşturmaktır npm install
. (Manuel olarak düzenlemek istemezsiniz package-lock.json
). Arasında (üst kısmına yakın) "sürüm" özelliğinin değerinin değiştirilmesi package.json
aynı değişecek package-lock.json
üzerinde npm install
, ama bir bağımlılık için bir şapka eklemenin aynısını yapmaz package-lock.json
.
package.json
Manuel olarak değiştirebileceğiniz ve package-lock.json
asla manuel olarak dokunmadığınız bir şey olarak düşünün . Her zaman BOTH dosyaları sürüm kontrolü - özellikle package-lock.json
. Her iki dosyayı da açın, proje adını elle düzenleyin package.json
, çalıştırın npm install
ve proje adının nasıl değiştiğini izleyin package-lock.json
. license
kaydedilmemiş gibi görünüyor package-lock.json
.
npm ci
, npm install
sadece kilit dosyası sağlanır rağmen package.json kullanacak
package-lock.json
, "version" özelliği gibi bir özellikteki sayısal değer veya bağımlılık özelliği olarak değiştirildiğinde yazılır package.json
.
Bu sayısal değerler package.json
ve package-lock.json
eşleşirse, package-lock.json
öğesinden okunur.
Bu sayısal değerler eşleşirse package.json
ve package-lock.json
eşleşmezse, package-lock.json
bu yeni değerlerle ve mevcutsa düzeltme işareti ve tilde gibi yeni değiştiricilerle yazılır. Ancak, değişikliği tetikleyen rakamdır package-lock.json
.
Ne demek istediğimi görmek için aşağıdakileri yapın. Kullanılması package.json
olmadan package-lock.json
çalıştırmak npm install
ile:
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "7.2.2"
}
}
package-lock.json
şimdi sahip olacak:
"sinon": {
"version": "7.2.2",
Şimdi her iki dosyayı da yeni bir dizine kopyalayın / yapıştırın. Değiştir package.json
(yalnızca düzeltme eki ekleyerek):
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.2.2"
}
}
çalıştırın npm install
. package-lock.json
Dosya yoksa , sinon@7.3.0 yüklenir. npm install
olduğu okuma package-lock.json
ve 7.2.2 yüklemeden.
Şimdi şu şekilde değiştirin package.json
:
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.3.0"
}
}
çalıştırın npm install
. package-lock.json
konudur yazılır ve şimdi gösterecektir:
"sinon": {
"version": "^7.3.0",
Bahsetmek gereken önemli bir şey de paket kilidi dosyası ile gelen güvenlik geliştirmesidir. Birisi genel npm kayıt defterine müdahale edip paketin kendisinin sürümünü değiştirmeden bir paketin kaynak kodunu değiştirirse, paketlerin tüm karmasını koruduğundan, paket kilit dosyası tarafından algılanır.
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.
Takım arkadaşlarının, konuşlandırmaların ve sürekli entegrasyonun tam olarak aynı bağımlılıkları kurması garanti edilecek şekilde bir bağımlılık ağacının tek bir temsilini açıklar.
{
"name": "mobileapp",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@angular-devkit/architect": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/@angular- devkit/architect/-/architect-0.11.4.tgz",
"integrity": "sha512-2zi6S9tPlk52vyqNFg==",
"dev": true,
"requires": {
"@angular-devkit/core": "7.1.4",
"rxjs": "6.3.3"
}
},
}
Bu dosya otomatik olarak oluşturulur ve npm tarafından paket kurulumlarınızı takip etmek ve projenizin bağımlılıklarının durumunu ve geçmişini daha iyi yönetmek için kullanılır. Bu dosyanın içeriğini değiştirmemelisiniz.
package-lock.json: Uygulamanız için şu anda yüklü olan tam sürüm ayrıntılarını içerir.