npm periksa dan perbarui paket jika perlu

471

Kita perlu mengintegrasikan pelari ujian Karma ke dalam TeamCity dan untuk itu saya ingin memberikan skrip sys-engineer kecil (PowerShell atau apa pun) yang akan:

  1. mengambil nomor versi yang diinginkan dari beberapa file konfigurasi (saya kira saya bisa memasukkannya sebagai komentar di karma.conf.js)

  2. periksa apakah versi terdefinisi dari karma runner terpasang di repo global npm

  3. jika tidak, atau versi yang diinstal lebih lama dari yang diinginkan: ambil dan instal versi yang benar

  4. menjalankannya: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Jadi pertanyaan saya yang sebenarnya adalah: "bagaimana orang bisa memeriksa skrip, jika versi yang diinginkan dari paket diinstal?". Haruskah Anda melakukan pemeriksaan, atau aman untuk menelepon saja npm -g installsetiap kali?

Saya tidak ingin selalu memeriksa dan menginstal versi terbaru yang tersedia, karena nilai konfigurasi lainnya mungkin menjadi tidak kompatibel

iLemming
sumber

Jawaban:

609

Untuk memeriksa apakah ada modul dalam proyek yang 'lama':

npm outdated

' ketinggalan jaman ' akan memeriksa setiap modul yang didefinisikan package.jsondan melihat apakah ada versi yang lebih baru di registri NPM.

Sebagai contoh, katakanlah xml2js 0.2.6(terletak di node_modulesdalam proyek saat ini) sudah usang karena ada versi yang lebih baru (0.2.7). Anda akan melihat:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

Untuk memperbarui semua dependensi, jika Anda yakin ini diinginkan:

npm update

Atau, untuk memperbarui ketergantungan tunggal seperti xml2js:

npm update xml2js
dublx
sumber
6
Hati-hati dengan npm updateterutama dengan npm update -g... itu tidak apa yang diharapkan sebagian besar kacang! Lihat: github.com/npm/npm/issues/6247 dan gist.github.com/othiym23/4ac31155da23962afd0e
jbandi
6
@ jbandi Mulai dari [email protected], npm -g updateaman untuk digunakan lagi. github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt
7
Perlu diketahui bahwa pembaruan npm tidak akan memperbarui file package.json Anda sebagaimana dinyatakan oleh jawaban dari @Erik Olson.
Ehtesham Hasan
5
As of [email protected], '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 outdatedakan mengidentifikasi paket yang harus diperbarui, dan npm update <package name>dapat digunakan untuk memperbarui setiap paket. Tetapi sebelum [email protected], npm update <package name>tidak akan memperbarui versi di package.json Anda yang merupakan masalah.

Alur kerja terbaik adalah:

  1. Identifikasi paket yang sudah ketinggalan zaman
  2. Perbarui versi di package.json Anda
  3. Jalankan npm updateuntuk menginstal versi terbaru dari setiap paket

Lihat npm-check-updatesuntuk membantu dengan alur kerja ini.

  • Instal npm-periksa-pembaruan
  • Jalankan npm-check-updatesuntuk mencantumkan paket apa yang kedaluwarsa (pada dasarnya sama dengan menjalankan npm outdated)
  • Jalankan npm-check-updates -uuntuk memperbarui semua versi di package.json Anda (ini adalah saus ajaib)
  • Jalankan npm updateseperti biasa untuk menginstal versi baru paket Anda berdasarkan paket yang diperbarui. Json
Erik Olson
sumber
3
npm outdatedakan menampilkan SEMUA paket .. bahkan di dalam paket lain .. tetapi itu tidak akan diperbarui dengan prosedur ini sehingga mereka akan selalu muncul .. jadi gunakan saja npm-check-updates(seperti yang Anda sarankan) yang hanya menampilkan paket utama dari package.json... ini relevan
davidhq
Dengan benang ini jauh lebih mudah cukup ketik 'upgrade benang'.
Christopher Grigg
17
Mengapa saya harus menginstal manajer pembaruan untuk mengelola manajer paket saya? Apakah kita tidak setuju ini konyol? Seharusnya sesederhana npm install --all-outdatedtapi tidak ...
ADJenks
3
Anda selalu dapat menjalankan npm update --save package_nameuntuk menyimpan perubahan terbaru ke package.json.
trungk18
Erik, bisakah Anda menjawab pertanyaan SO terkait ini , karena masih sedikit membingungkan bagi saya perbedaan antara kedua perintah, yaitu, npm updatevs npm-check-updates?
João Pimentel Ferreira
146

Ada juga modul "segar" bernama npm-check:

npm-cek

Periksa dependensi yang usang, salah, dan tidak digunakan.

masukkan deskripsi gambar di sini

Ini juga menyediakan cara interaktif yang nyaman untuk memperbarui dependensi.

alecxe
sumber
78

Satu langkah mudah:

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

Itu semuanya. Semua versi paket di package.jsonakan menjadi versi utama terbaru.

Edit:

Apa yang terjadi disini?

  1. Menginstal paket yang memeriksa pembaruan untuk Anda.

  2. Gunakan paket ini untuk memperbarui semua versi paket di package.json(-u adalah kependekan dari --updateAll).

  3. Instal semua versi paket yang baru.

Mat
sumber
3
@imnickvaughn ncuadalah singkatan dari node-check-updates dan -amerupakan opsi 'upgradeAll'. Temukan semua opsi di sini: npmjs.com/package/npm-check-updates
Arian Acosta
Dan bagaimana jika saya ingin melakukannya dalam satu baris tanpa menggunakan paket lain seperti ncu?
ADJenks
Atau tanpa pemasangan global,npx -p npm-check-updates ncu -u
entozoon
68
  • Untuk memperbarui satu paket lokal:

    1. Pertama cari tahu paket usang Anda:

      npm outdated

    2. Kemudian perbarui paket atau paket yang Anda inginkan secara manual sebagai:

      npm update --save package_name

Dengan cara ini tidak perlu memperbarui package.json file lokal Anda .

Perhatikan bahwa ini akan memperbarui paket Anda ke versi terbaru.

  • Jika Anda menulis beberapa versi di package.jsonfile Anda dan lakukan:

    npm update package_name

    Dalam hal ini Anda hanya akan mendapatkan versi stabil berikutnya (diinginkan) mengenai versi yang Anda tulis di package.jsonfile Anda .

Dan dengan npm list (package_name)Anda dapat mengetahui versi saat ini dari paket lokal Anda.

Tukang arloji
sumber
14

NPM memerintahkan untuk memperbarui atau memperbaiki kerentanan dalam beberapa file manifes dependensi

  • Gunakan perintah di bawah ini untuk memeriksa kedaluwarsa atau kerentanan dalam modul simpul Anda.

    npm audit

  • Jika ada kerentanan ditemukan, gunakan perintah di bawah ini untuk memperbaiki semua masalah.

    npm audit fix

  • Jika tidak berhasil, cobalah

    npm audit fix -f, perintah ini hampir akan memperbaiki semua kerentanan. Beberapa dependensi atau dependensi dev dikunci dalam file package-lock.json , jadi kami menggunakan -fflag untuk memaksa memperbaruinya.

  • Jika Anda tidak ingin menggunakan perbaikan audit paksa maka Anda dapat secara manual memperbaiki versi dependensi Anda dengan mengubahnya di file package-lock.json dan package.json . Lalu lari

npm update && npm upgrade

Smit Patel
sumber
10

Tidak ada paket tambahan, hanya memeriksa yang sudah usang dan memperbarui yang ada, perintah ini akan melakukan:

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

MikeMajara
sumber
Astaga, terima kasih!
drKreso
Ini adalah jawaban yang bagus karena dapat dimasukkan ke dalam skrip shell apa pun untuk mengotomatiskan langkah ini tanpa mengandalkan paket yang diinstal lebih lanjut.
Jankapunkt
4

Saat memasang paket npm (baik secara global atau lokal), Anda dapat menentukan versi tertentu dengan menggunakan @versionsintaks untuk menentukan versi yang akan diinstal.

Dengan kata lain, melakukan: npm install -g [email protected] akan memastikan bahwa hanya 0.9.2 yang diinstal dan tidak akan menginstal ulang jika sudah ada.

Sebagai saran, saya sarankan menghindari instalasi global npm di mana pun Anda bisa. Banyak orang tidak menyadari bahwa jika suatu dependensi mendefinisikan suatu file bin, ia terinstal ke ./node_modules/.bin/. Seringkali, sangat mudah untuk menggunakan versi lokal dari modul yang diinstal yang didefinisikan di package.json Anda. Bahkan, skrip npm akan menambahkan ./node_modules/.bin ke jalur Anda.

Sebagai contoh, ini adalah package.json, ketika saya menjalankan npm install && npm testakan menginstal versi karma yang didefinisikan di package.json saya, dan menggunakan versi karma tersebut (diinstal pada node_modules / .bin / karma) saat menjalankan testskrip:

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

Ini memberi Anda manfaat dari paket Anda. Johnny mendefinisikan versi karma untuk digunakan dan tidak harus menyimpan konfigurasi itu secara global di kotak CI Anda.

addisonj
sumber
apa yang ada dalam testskrip? Tolong beri saya petunjuk bagaimana Anda menginstalnya dengan skrip.
iLemming
1
Lihatlah package.json. Di bawah properti "scripts", Anda dapat mendefinisikan properti lain, "test" yang nilainya adalah perintah yang ingin Anda jalankan ketika Anda mengetik npm test. npm docs cukup bagus di sini: npmjs.org/doc/scripts.html
addisonj
4

Pada [email protected]+ Anda cukup melakukan:

npm update <package name>

Ini akan secara otomatis memperbarui package.jsonfile. Kami tidak harus memperbarui versi terbaru secara manual dan kemudian menggunakannyanpm update <package name>

Anda masih bisa menggunakan perilaku lama

npm update --no-save

( Referensi )

adiga
sumber
1

Untuk benar-benar memperbarui hanya satu paket, instal NCU dan kemudian jalankan hanya untuk paket itu. Ini akan menabrak terbaru nyata.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
regisbsb
sumber
6
Posting berkualitas rendah, beberapa penjelasan yang lebih baik akan membantu.
linuxfan mengatakan Reinstate Monica