npm gerekirse paketi kontrol edin ve güncelleyin


471

Karma test çalıştırıcısını TeamCity'ye entegre etmeliyiz ve bunun için sys-mühendislerine küçük bir komut dosyası (powershell veya her neyse) vermek istiyorum:

  1. bazı yapılandırma dosyasından istenen sürüm numarasını almak (Sanırım bir yorum olarak sağ koymak karma.conf.js)

  2. npm'in global deposunda tanımlanan karma koşucunun sürümünün kurulu olup olmadığını kontrol edin

  3. değilse veya yüklü sürüm istenilenden daha eski ise: doğru sürümü alın ve yükleyin

  4. çalıştırın: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Yani asıl sorum şudur: "paketin istenen sürümü yüklüyse bir komut dosyasını nasıl kontrol edebilirim?". Çeki yapmalı mıydınız yoksa npm -g installher seferinde aramak güvenli mi?

Diğer yapılandırma değerleri uyumsuz hale gelebileceğinden, her zaman en son sürümü kontrol etmek ve yüklemek istemiyorum

Yanıtlar:


609

Projedeki herhangi bir modülün 'eski' olup olmadığını kontrol etmek için:

npm outdated

" modası geçmiş ", tanımlanan tüm modülleri kontrol package.jsoneder ve NPM kayıt defterinde daha yeni bir sürüm olup olmadığını görür.

Örneğin, xml2js 0.2.6( node_modulesmevcut projede bulunan) diyelim ki daha yeni bir sürüm var (0.2.7). Görecektiniz:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

Tüm bağımlılıkları güncellemek için , bunun isteneceğinden eminseniz:

npm update

Veya tek bir bağımlılığı güncellemek için xml2js:

npm update xml2js

6
npm updateÖzellikle dikkatli olun npm update -g... çoğu peaolün yapmasını beklediği şey değil! Bkz. Github.com/npm/npm/issues/6247 ve gist.github.com/othiym23/4ac31155da23962afd0e
jbandi

6
@jbandi npm@2.6.1'den itibaren npm -g updatetekrar güvenle kullanılabilir. github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt

7
Npm güncellemesinin @Erik Olson tarafından verilen yanıtta belirtildiği şekilde package.json dosyanızı güncellemeyeceğini lütfen unutmayın.
Ehtesham Hasan

5
As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Sidney

368

npm outdatedgüncellenmesi gereken paketleri tanımlar ve npm update <package name>her paketi güncellemek için kullanılabilir. Ancak npm@5.0.0'dan önce npm update <package name>, package.json içindeki bir sorun olan sürümleri güncellemez.

En iyi iş akışı:

  1. Eski paketleri belirleme
  2. Paketinizdeki sürümleri güncelleyin. Json
  3. npm updateHer paketin en son sürümlerini yüklemek için çalıştırın

npm-check-updatesBu iş akışıyla ilgili yardım için göz atın .

  • Yükleme npm-check-güncellemeler
  • npm-check-updatesHangi paketlerin güncel olmadığını listelemek için çalıştırın (temel olarak çalışanla aynı şeydir npm outdated)
  • npm-check-updates -uPaketinizdeki tüm sürümleri güncellemek için çalıştırın . Json (bu sihirli sos)
  • npm updateGüncelleştirilmiş pakete dayalı olarak paketlerinizin yeni sürümlerini yüklemek için her zamanki gibi çalıştırın .

3
npm outdatedTÜM paketleri gösterecektir .. diğer paketlerin içinde bile .. ancak bunlar bu prosedürle güncellenmeyecek, böylece her zaman görünecekler ... bu yüzden sadece npm-check-updatesana paketleri gösteren (gerçekten tavsiye ettiğiniz gibi) kullanın package.json...
davidhq

İplikle bu çok daha kolaydır, sadece 'iplik yükseltme' yazın.
Christopher Grigg

17
Paket yöneticimi yönetmek için neden bir güncelleme yöneticisi kurmalıyım? Bunun saçma olduğunu kabul etmiyor muyuz? Bu kadar basit olmalı npm install --all-outdatedama değil ...
ADJenks

3
npm update --save package_namePackage.json'daki en son değişikliği kaydetmek için her zaman çalışabilirsiniz .
trungk18

Erik, bu ilgili SO sorusunu cevaplayabilir misiniz , çünkü bana her iki komut arasındaki farkı biraz kafa karıştırıcı, yani npm updatevs npm-check-updates?
João Pimentel Ferreira

146

Ayrıca "yeni" bir modül var npm-check:

NPM-çek

Eski, yanlış ve kullanılmayan bağımlılıkları kontrol edin.

resim açıklamasını buraya girin

Ayrıca bağımlılıkları güncellemek için kullanışlı bir etkileşimli yol sağlar.


78

Tek kolay adım:

$ npm i -g npm-check-updates && ncu -u && npm i

Hepsi bu. Tüm paket sürümleripackage.json en son ana sürümler olacaktır.

Düzenle:

Burada ne oluyor?

  1. Sizin için güncellemeleri kontrol eden bir paket kurma.

  2. Paketinizdeki tüm paket sürümlerini güncellemek için bu paketi kullanın package.json(-u --updateAll kısaltmasıdır).

  3. Paketlerin tüm yeni sürümlerini yükleyin.


3
@imnickvaughn ncu, düğüm denetimi güncellemelerini temsil eder ve -a'upgradeAll' seçeneğidir. Tüm seçenekleri burada bulabilirsiniz: npmjs.com/package/npm-check-updates
Arian Acosta

Ve ncu gibi başka bir paket kullanmadan bir satırda yapmak istersem ne olur?
Ocak'ta

Veya global kurulum olmadan,npx -p npm-check-updates ncu -u
entozoon

68
  • Tek bir yerel paketi güncellemek için:

    1. Önce eski paketlerinizi öğrenin:

      npm outdated

    2. Sonra manuel olarak istediğiniz paketi veya paketleri güncelleyin:

      npm update --save package_name

Bu şekilde yerel package.json dosyanızı güncellemenize gerek yoktur .

Bunun paketinizi en son sürüme güncelleyeceğini unutmayın.

  • package.jsonDosyanıza bir sürüm yazar ve şunları yaparsanız:

    npm update package_name

    Bu durumda, package.jsondosyanızda yazdığınız sürümle ilgili yalnızca bir sonraki kararlı sürümü (aranan) alırsınız .

Ve npm list (package_name)yerel paketlerinizin mevcut sürümünü öğrenebilirsiniz.


14

Bazı bağımlılık bildirim dosyalarındaki güvenlik açıklarını güncellemek veya düzeltmek için NPM komutları

  • Düğüm modüllerinizdeki eski veya güvenlik açıklarını kontrol etmek için aşağıdaki komutu kullanın.

    npm audit

  • Herhangi bir güvenlik açığı bulunursa, tüm sorunları gidermek için aşağıdaki komutu kullanın.

    npm audit fix

  • Sizin için işe yaramazsa, o zaman deneyin

    npm audit fix -f, bu komut neredeyse tüm güvenlik açıklarını düzeltir. Bazı bağımlılıklar veya devDependencies paket-lock.json dosyasında kilitlidir , bu yüzden -fgüncellemeye zorlamak için bayrak kullanırız.

  • Zorla denetim düzeltmesini kullanmak istemiyorsanız, bağımlılık sürümlerinizi package-lock.json ve package.json dosyalarında değiştirerek elle düzeltebilirsiniz . O zaman koş

npm update && npm upgrade



10

Ek paket yok, sadece eski olanları kontrol etmek ve olanları güncellemek için bu komut şunları yapacaktır:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)


İyi şeyler dostum, teşekkürler!
drKreso

Bu harika bir cevaptır, çünkü başka bir paketin yüklü olmasına gerek kalmadan bu adımı otomatikleştirmek için herhangi bir kabuk betiğine konabilir.
Jankapunkt

4

Npm paketlerini kurarken (hem küresel hem de yerel olarak) belirli bir sürümü tanımlayabilirsiniz. @version kurulacak bir sürümü tanımlamak sözdizimini bir sürümü tanımlayabilirsiniz.

Başka bir deyişle, yapmak: npm install -g karma@0.9.2 yalnızca 0.9.2'nin yüklü olmasını sağlar ve zaten varsa yeniden yüklenmez.

Bir öneri olarak, mümkün olan her yerde global npm kurulumlarından kaçınmanızı öneririm. Birçok kişi, bir bağımlılık bir bin dosyasını tanımlarsa, ./node_modules/.bin/ dizinine kurulduğunu fark etmez. Genellikle, paketinizde tanımlanan yüklü bir modülün yerel sürümünü kullanmak çok kolaydır. Json. Aslında, npm komut dosyaları yolunuza ./node_modules/.bin dosyasını ekleyecektir.

Örnek olarak, çalıştırdığımda npm install && npm test, package.json'da tanımlanan karma sürümünü yükleyecek ve testkomut dosyasını çalıştırırken karma (node_modules / .bin / karma'da yüklü) sürümünü kullanacak bir package.json :

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

Bu size paketinizin faydasını verir. Json, kullanılacak karma sürümünü tanımlar ve bu yapılandırmayı global olarak CI kutunuzda tutmak zorunda kalmaz.


testsenaryoda ne var ? Lütfen bir senaryo ile nasıl yüklediğinize dair bir ipucu verebilir misiniz?
iLemming

1
Pakete bakın. Json. "Komut dosyaları" özelliğinin altında, değerini yazarken çalıştırmak istediğiniz bir komut olan başka bir özellik olan "test" tanımlayabilirsiniz npm test. npm dokümanları burada oldukça iyi: npmjs.org/doc/scripts.html
addisonj

4

İtibariyle npm@5.0.0+ sadece yapabilirsiniz:

npm update <package name>

Bu dosyayı otomatik olarak güncelleyecektir package.json. En son sürümü manuel olarak güncellememiz ve ardındannpm update <package name>

Hala eski davranışı kullanarak

npm update --no-save

( Referans )


1

Gerçekten sadece bir paketi güncellemek için NCU'yu yükleyin ve sadece bu paket için çalıştırın. Bu gerçek sonuncusu olacak.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

6
Düşük kaliteli yazı, daha iyi bir açıklama yardımcı olacaktır.
linuxfan diyor Reinstate Monica
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.