Yanıtlar:
Gönderen npm docs :
Kısacası, npm install ve npm ci kullanımı arasındaki temel farklar şunlardır:
- Projenin mevcut bir package-lock.json veya npm-shrinkwrap.json dosyası olmalıdır.
- Paket kilidindeki bağımlılıklar package.json ile aynı değilse, npm ci paket kilidini güncellemek yerine bir hata ile çıkar.
- npm ci bir kerede tüm projeleri yükleyebilir: bu komutla bağımsız bağımlılıklar eklenemez.
- Bir node_modules zaten varsa, npm ci kurulumuna başlamadan önce otomatik olarak kaldırılacaktır.
- Asla package.json veya paket kilitlerinden birine yazmaz: yüklemeler esasen dondurulur.
Temel olarak,
bir bağımlılıklar listesi oluşturmak için npm install
okur package.json
ve package-lock.json
bu bağımlılıkların hangi sürümlerinin yükleneceğini bildirmek için kullanır . İçinde bir bağımlılık yoksa package-lock.json
buna eklenirnpm install
.
npm ci
( C sürekli olmayan giriş işleminden sonra adlandırılır ), bağımlılıkları doğrudan yükler package-lock.json
ve package.json
yalnızca eşleşmeyen sürümlerin olmadığını doğrulamak için kullanır . Herhangi bir bağımlılık eksikse veya uyumsuz sürümleri varsa, hata verir .
npm install
Yeni bağımlılıklar eklemek ve bir projedeki bağımlılıkları güncellemek için kullanın . Genellikle, bağımlılık listesini güncelleyen değişiklikleri çektikten sonra geliştirme sırasında kullanırsınız, ancak kullanmak iyi bir fikir olabilir.npm ci
bu durumda .
npm ci
Deterministik, tekrarlanabilir bir yapıya ihtiyacınız varsa kullanın . Örneğin sürekli entegrasyon, otomatik işler vb. Sırasında ve bağımlılıkları ilk kez kurarken npm install
.
npm install
npm-shrinkwrap.json
vepackage-lock.json
(bu sırayla) yönlendirilir.node_modules
.package.json
Veya 'a yazabilir package-lock.json
.
npm i packagename
) ile kullanıldığında,package.json
bağımlılığı eklemek veya güncellemek için .npm i
) package-lock.json
bu dosyada bulunmuyorlarsa bazı bağımlılıkların sürümünü kilitlemek için yazılabilir .npm ci
package-lock.json
veyanpm-shrinkwrap.json
mevcut olmak.package.json
.node_modules
ve kurar kerede .package.json
ya da package-lock.json
.İken npm ci
kadar tüm bağımlılık ağacını oluşturur package-lock.json
ya npm-shrinkwrap.json
, npm install
içeriğini güncellemektedirnode_modules
şu algoritmasını (kullanarak kaynak ):
load the existing node_modules tree from disk clone the tree fetch the package.json and assorted metadata and add it to the clone walk the clone and add any missing dependencies dependencies will be added as close to the top as is possible without breaking any other modules compare the original tree with the cloned tree and make a list of actions to take to convert one to the other execute all of the actions, deepest first kinds of actions are install, update, remove and move
npm install package
Her iki değiştirebilir package-lock.json
ve package.json
süre npm install
whithout argümanlar sadece değişiklik yapacağıpackage-lock.json
npm ci
varolan herhangi bir node_modules klasörünü siler ve package-lock.json
her paketin belirli bir sürümünü yüklemek için dosyaya güvenir . Bazı özellikleri atladığı için npm kurulumundan çok daha hızlıdır. Temiz devlet kurulumu ci / cd boru hatları ve liman işçileri için harika! Ayrıca, belirli paketleri değil, her şeyi bir kerede yüklemek için kullanırsınız.
Bağladığınız belgelerin özeti vardı:
Kısacası, npm install ve npm ci kullanımı arasındaki temel farklar şunlardır:
- Projenin mevcut bir package-lock.json veya npm-shrinkwrap.json dosyası olmalıdır.
- Paket kilidindeki bağımlılıklar package.json ile aynı değilse, npm ci paket kilidini güncellemek yerine bir hata ile çıkar.
- npm ci bir kerede tüm projeleri yükleyebilir: bu komutla bağımsız bağımlılıklar eklenemez.
- Bir node_modules zaten varsa, npm ci kurulumuna başlamadan önce otomatik olarak kaldırılacaktır.
- Asla package.json veya paket kilitlerinden birine yazmaz: yüklemeler esasen dondurulur.
Komutlar işlevsellik açısından çok benzerdir, ancak fark, dosyalarınızda package.json
ve package-lock.json
dosyalarınızda belirtilen bağımlılıkları yüklemek için alınan yaklaşımdadır .
npm ci
uygulamanızın tüm bağımlılıklarının temiz bir yüklemesini gerçekleştirir npm install
sistemde zaten mevcutsa bazı yüklemeleri atlayabilir. Sistemde zaten kurulu olan sürüm package.json
, kurmayı amaçladığınız sürüm değilse, yani kurulu sürüm ' gerekli ' sürümden farklıysa bir sorun ortaya çıkabilir .
Diğer farklılıklar npm ci
package*.json
dosyalarınıza asla dokunmaz . Yükleme durur ve bağımlılık sürümleri package.json
ve package-lock.json
dosyalarında eşleşmezse bir hata gösterir .
Burada resmi dokümanlardan çok daha iyi bir açıklama okuyabilirsiniz .
Ayrıca, burada paket kilitleri hakkında bilgi almak isteyebilirsiniz .
Alp gibi ışık düğümü docker görüntülerinde, bağımlılığı node-gyp
tarafından kullanılan Python yüklü olmadığı unutulmamalıdır.npm ci
.
Sanırım sahip olmak için biraz düşünülmüş npm ci
için Python'u derlemenize bağımlılık olarak yüklemeniz gerektiğine .
Daha fazla bilgi burada Docker ve npm - gyp ERR! Tamam değil
Bunları farklı durumlarda kullanmalısınız.
npm install
node_modules
dizini önbelleğe almak istediğinizde geliştirme ve CI için mükemmeldir . Ne zaman kullanılır? Başkalarının kullanması için bir paket yapıyorsanız bunu yapabilirsiniz ( node_modules
böyle bir sürüme dahil ETMİYORSUNUZ) . Önbelleklemeyle ilgili olarak , çalışma zamanı gereksinimleri arasındaki farklar nedeniyle yeniden yüklenmesi gerekebilecek farklı Node.js
hatırlama sürümlerini desteklemeyi planlıyorsanız dikkatli olun . Bir sürüme bağlı kalmak istiyorsanız, en son sürüme sadık kalın .node_modules
Node.js
LTS
npm ci
Bir üretim uygulamasını (diğer paketler tarafından kullanılmayacak bir son ürün) test etmek ve yayınlamak için kullanılmalıdır, çünkü kurulumun olabildiğince belirleyici olması önemlidir, bu kurulum daha uzun sürer, ancak sonuçta uygulamanız daha güvenilirdir ( node_modules
böyle bir sürüme dahil edersiniz ) . LTS
Sürümü ile sopa Node.js
.
Bonus: Ne kadar karmaşık yapmak istediğinize bağlı olarak bunları karıştırabilirsiniz. İçindeki özellik dallarında , ekiplerinizin verimliliğini artırmak için git
önbellekleme yapabilir node_modules
ve birleştirme isteği ve ana dallar npm ci
belirleyici bir sonuç için güvenebilir .
npm install
Package.json'a yazabileceğimi bilmiyordum . Burada ne yazabileceğini biliyor musun?