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 installokur package.jsonve package-lock.jsonbu 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.jsonbuna 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.jsonve package.jsonyalnı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 installYeni 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 ciDeterministik, 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 installnpm-shrinkwrap.jsonvepackage-lock.json (bu sırayla) yönlendirilir.node_modules.package.jsonVeya '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.jsonbu dosyada bulunmuyorlarsa bazı bağımlılıkların sürümünü kilitlemek için yazılabilir .npm cipackage-lock.jsonveyanpm-shrinkwrap.json mevcut olmak.package.json .node_modulesve kurar kerede .package.jsonya da package-lock.json.İken npm cikadar tüm bağımlılık ağacını oluşturur package-lock.jsonya 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 packageHer iki değiştirebilir package-lock.json ve package.json süre npm installwhithout argümanlar sadece değişiklik yapacağıpackage-lock.json
npm civarolan herhangi bir node_modules klasörünü siler ve package-lock.jsonher 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.jsonve package-lock.jsondosyaları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 cipackage*.json dosyalarınıza asla dokunmaz . Yükleme durur ve bağımlılık sürümleri package.jsonve package-lock.jsondosyaları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-gyptarafı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 installnode_modulesdizini ö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_modulesbö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.jshatı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_modulesNode.jsLTS
npm ciBir ü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_modulesböyle bir sürüme dahil edersiniz ) . LTSSü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_modulesve birleştirme isteği ve ana dallar npm cibelirleyici bir sonuç için güvenebilir .
npm installPackage.json'a yazabileceğimi bilmiyordum . Burada ne yazabileceğini biliyor musun?