Bagaimana cara memperbarui setiap ketergantungan dalam package.json ke versi terbaru?

2013

Saya menyalin package.json dari proyek lain dan sekarang ingin menambah semua dependensi ke versi terbaru mereka karena ini adalah proyek baru dan saya tidak keberatan memperbaiki sesuatu jika rusak.

Apa cara termudah untuk melakukan ini?

Cara terbaik yang saya tahu sekarang adalah menjalankan npm info express versionkemudian perbarui package.json secara manual untuk masing-masing. Pasti ada cara yang lebih baik.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

UPDATE 5/1/19 : Enam tahun kemudian dan saya masih mempertahankan npm-check-update sebagai solusi komprehensif untuk masalah ini. Nikmati!

Raine Revere
sumber
2
Senang melihat pendekatan lain untuk masalah ini. Saya sangat suka hasil karya Salita. Beberapa fitur bagus yang berkontribusi pada alat saya sekarang, github.com/tjunnone/npm-check-updates, adalah pelestarian semantik versi (seperti 1.x atau> 2.1.0) dan penyaringan dengan nama / regex / devDeps-only.
Raine Revere
1
PERLU ada jawaban yang lebih baik di sini. Tentunya dengan resolusi ketergantungan, Anda tidak selalu dapat memiliki versi terbaru dari semuanya. Memaksimalkan jumlah terbesar dari modul versi terbaru hanya itu, semacam masalah optimasi. Tetapi NPM tidak tahu modul mana yang Anda inginkan paling baru daripada yang lain. Akan lebih keren jika ada sesuatu seperti ini: pembaruan npm - terbaru xyz, di mana xyz adalah modul yang Anda ingin menjadi terbaru dan semua modul lain akan mengikuti dengan versi terbaru yang kompatibel.
Alexander Mills
2
npm akan menangani konflik versi dengan benar antara dependensi bersama dengan mengunduh yang benar untuk masing-masing. Jadi, jika Dep A tergantung pada Dep C v1.0.0 dan Dep B tergantung pada Dep C v2.0.0, mereka masing-masing akan diinstal dan digunakan dengan tepat. Karena itu, Anda bebas menginstal paket terbaru yang Anda inginkan.
Raine Revere
Coba ini untuk memaksa peningkatan:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey
Saya selalu memeriksa jawaban ini. Tetapi saya melihat bahwa itu telah tergelincir dalam hasil Google. Semoga komentar ini akan membantu mendorong relevansi kembali !!
Zach Smith

Jawaban:

2393

Sepertinya npm-check-update adalah satu-satunya cara untuk mewujudkannya sekarang.

npm i -g npm-check-updates
ncu -u
npm install

Pada npm <3.11:

Cukup ubah setiap versi ketergantungan *, lalu jalankan npm update --save. ( Catatan: rusak dalam versi terbaru (3.11) npm ).

Sebelum:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Setelah:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Tentu saja, ini adalah palu tumpul untuk memperbarui dependensi. Tidak apa-apa jika - seperti yang Anda katakan - proyek itu kosong dan tidak ada yang dapat merusak.

Di sisi lain, jika Anda bekerja di proyek yang lebih matang, Anda mungkin ingin memverifikasi bahwa tidak ada perubahan pada dependensi Anda sebelum memutakhirkan.

Untuk melihat modul mana yang sudah usang, jalankan saja npm outdated. Ini akan mendaftar semua dependensi yang diinstal yang memiliki versi yang lebih baru tersedia.

josh3736
sumber
13
@thefourtheye: Anda biasanya tidak boleh meninggalkan * dalam package.json karena Anda mungkin akhirnya secara otomatis menginstal versi modul baru dengan memecah perubahan yang merusak aplikasi Anda. Karena kami menggunakan di --savesini, *diganti dengan versi setiap paket saat ini.
josh3736
50
Saya tidak bisa menjalankannya. Apakah ada yang berubah dengan npm sejak jawaban ini diposting? Ketika saya menggunakan wildcard dan kemudian npm install --savewildcard tersisa di saya package.json.
davidtheclark
15
Sayangnya, menggunakan updatetidak berhasil, bagi saya. Saya masih pergi dengan wildcard. Apakah ada dokumentasi tentang hal ini yang Anda ketahui, atau sumber daya lain yang mungkin saya lihat?
davidtheclark
120
Agak lama tapi itu mungkin bisa membantu orang lain: github.com/tjunnone/npm-check-updates | Gunakan npm install -g npm-check-updatesuntuk menginstal, kemudian npm-check-updatesuntuk memeriksa apakah dependensi Anda memiliki pembaruan, dan npm-check-updates -uuntuk memperbarui versi package.json Anda. Kemudian hanya npm installdan akan mengunduh versi baru.
RaphaelDDL
5
Masalah Anda mungkin berasal dari fakta bahwa Anda mencoba memperbarui paket dev dengan mengetik npm update --savealih-alih npm update --save-dev.
adriendenat
1035

npm-check-updates adalah utilitas yang secara otomatis menyesuaikan package.json dengan versi terbaru dari semua dependensi

lihat https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDIT] Cara yang sedikit lebih mengganggu (menghindari instalasi global) jika Anda memiliki versi modern npmadalah:

$ npx npm-check-updates -u
$ npm install 
Etienne
sumber
135
Ini harus tersedia secara native melalui perintah npm itu sendiri, memang solusi terbaik sejauh ini untuk memperbarui dependensi.
Mohammad Arif
7
Harus menjadi bagian dari npm secara asli, sepenuhnya setuju. Namun, tidak dan solusi ini datang seperti angin. Terima kasih.
Stefan
2
saya berasumsi Anda orang-orang mendorong [KERAS] untuk mendapatkan ini ke npm inti?
Enorl76
3
@Batman Ya jika Anda tidak menginstal sebelumnya. Kalau tidak gunakan pembaruan npm. ncu baru saja memperbarui package.json. Itu tidak menginstal atau memperbarui 'node_modules'.
Muzaffer
1
paket tidak berguna, hanya memperbarui sebagian dari paket dengan ncu -a, tidak memperbarui package.json juga.
Alexander Kim
385

Diperbarui untuk NPM terbaru

npm 2+ (Node 0.12+):


npm outdated
npm update
git commit package-lock.json

Npm kuno (sekitar 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Pastikan untuk menyusutkan deps Anda, atau Anda mungkin berakhir dengan proyek mati. Saya menarik sebuah proyek tempo hari dan itu tidak akan berjalan karena deps saya semua ketinggalan zaman / diperbarui / berantakan. Jika saya menyusut, npm akan menginstal apa yang saya butuhkan.


Detail

Bagi yang penasaran sejauh ini, inilah yang saya rekomendasikan:

Gunakan npm-check-updatesatau npm outdateduntuk menyarankan versi terbaru.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Kemudian lakukan instalasi bersih (tanpa rm saya mendapat peringatan ketergantungan)

$ rm -rf node_modules
$ npm install 

Terakhir, simpan versi yang tepat untuk npm-shrinkwrap.jsondengannpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Sekarang, npm installsekarang akan menggunakan versi yang tepat dinpm-shrinkwrap.json

Jika Anda memeriksa npm-shrinkwrap.jsongit, semua pemasangan akan menggunakan versi yang sama persis.

Ini adalah cara untuk transisi keluar dari pengembangan (semua pembaruan, sepanjang waktu) ke produksi (tidak ada yang menyentuh apa pun).

ps Yarn mengirimkan daftar paket Anda ke Facebook .

Michael Cole
sumber
13
inilah jawaban yang benar sebenarnya. dengan puluhan deps diinstal, ini adalah def cara yang lebih baik
Angel S. Moreno
6
Dari pengalaman, saran untuk selalu memperbarui semua paket sekaligus bisa berbahaya.
alphadogg
1
Tentunya. Jika Anda membuat dan npm-shrinkwrap.jsonmenjadi sumber, dan melakukan setiap kali Anda memperbarui, Anda selalu dapat 'kembali ke tempat Anda sebelumnya'. Saya mengabaikan fitur shrinkwrap ketika saya mulai.
Michael Cole
21
ini tidak menjawab pertanyaan. Pertanyaannya adalah bagaimana cara memperbarui versi terbaru . npm updatehanya pembaruan ke versi semver, bukan yang terbaru.
gman
1
Bisakah Anda menjawab jika ada alternatif yarn upgrade package@version?
Ben Sinclair
201

Untuk memperbarui satu ketergantungan ke versi terbaru tanpa harus membukanya secara manual package.jsondan mengubahnya, Anda dapat menjalankannya

npm install {package-name}@* {save flags?}

yaitu

npm install express@* --save

Untuk referensi, instal npm


Sebagaimana dicatat oleh pengguna Vespakoen pada hasil edit yang ditolak, juga memungkinkan untuk memperbarui beberapa paket sekaligus dengan cara ini:

npm install --save package-nave@* other-package@* whatever-thing@*

Dia juga membagikan satu-liner untuk shell berdasarkan npm outdated. Lihat edit untuk kode dan penjelasan.


PS: Saya juga benci harus mengedit secara manual package.jsonuntuk hal-hal seperti itu;)

laconbass
sumber
8
Solusi ini sangat bagus. Cara cepat dan mudah untuk memperbarui secara eksplisit satu paket ke versi terbaru tanpa menginstal modul baru. Saya suka npm-check-update, tetapi afaik mencoba untuk menjaga semua paket up to date, yang tidak selalu seperti yang Anda inginkan.
Chev
ini tidak berhasil untuk sayanpm install react-native-image-picker@* --save
Harry Moreno
1
@Chev: ncu dapat dengan mudah menargetkan satu atau beberapa paket dengan ncu express mocha chai. Anda juga dapat mengecualikan paket dengan ncu -x mocha. Saya setuju bahwa di atas adalah solusi paling sederhana untuk memperbarui satu paket.
Raine Revere
2
Saya hanya menggunakan sesuatu yang serupa yang bekerja, dari dokumen yang mungkin lebih baru ... menggunakan "terbaru" bukan "*"npm install {package-name}@latest {save flags}
Drew Thomas
1
Terima kasih banyak, solusi ini sangat bagus dan persis apa yang saya cari. Ini memungkinkan Anda untuk memperbarui paket tertentu tanpa perlu memperbarui setiap ketergantungan lainnya yang dapat menyebabkan masalah yang tidak terduga!
Dany Wehbe
90

Jika Anda menggunakan Visual Studio Code sebagai IDE Anda, ini adalah ekstensi kecil yang menyenangkan untuk memperbarui package.jsonproses satu klik.

Lensa Versi

masukkan deskripsi gambar di sini

GollyJer
sumber
2
Ada versi teks 3 agung di sini: github.com/yavorsky/Bump , meskipun agak lambat.
Alexander Kim
4
Bekerja dengan baik, jika tidak jelas bagi siapa pun, ini cukup memeriksa versi di package.json Anda terhadap versi repositori npm terbaru, dan memungkinkan Anda mengklik versi untuk memperbarui konten teks di package.json Anda. Anda kemudian perlu menjalankan "pembaruan npm" untuk memberi tahu npm untuk menginstal versi baru.
MattG
2
Perhatikan bahwa sudah dimungkinkan untuk melihat versi terbaru dari dependensi paket dengan deskripsi singkat dalam Visual Studio Code
bawaan
1
Perhatikan bahwa itu tidak secara otomatis menginstal paket ketika mengklik tautan lensa kode! Ini hanya memperbarui teks versi package.json.
RA.
59

Ini bekerja pada npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
Tobiasz Cudnik
sumber
10
Senang mendengarnya. Dugaan saya adalah bahwa ini umumnya akan menjadi praktik buruk di setiap situs produksi karena akan memperbarui ke versi yang berpotensi tidak kompatibel dengan mundur. Sintaks '~ 2' mengunci Anda ke nomor versi utama yang diberikan, yang semver berikut akan kompatibel ke belakang.
Raine Revere
1
Anda selalu dapat membekukan deps pada prod. Ada perintah untuk itu. -2 Kedengarannya ok.
Tobiasz Cudnik
5
Saya suka menggunakan ini dan npm shrinkwrapmembekukan deps.
daniellmb
Jika kita melakukan ini, lalu bagaimana kita tahu versi sebenarnya dari paket itu? Katakanlah saya memiliki entri yang dipanggil "react": "16.9.0"dan kemudian saya menambahkan terbaru ke dalamnya dan berlari npm i, setelah ini bagaimana saya menemukan versi reaksi yang sekarang dalam proyek saya? karena "react":"latest"apa yang tersisa di package.json saya, bukan nomor bahkan setelah saya lakukannpm i
programmer
52
  1. Gunakan *sebagai versi untuk rilis terbaru, termasuk tidak stabil
  2. Gunakan latestsebagai definisi versi untuk versi stabil terbaru
  3. Ubah package.json dengan persis menggunakan nomor versi stabil terbaru LatestStablePackages

Berikut ini sebuah contoh:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},
Tuan Sun Lin
sumber
2
Ini jawaban terbaik.
Peza
1
ini seharusnya jawaban yang diterima
EigenFool
masih pendekatan paling aman untuk diambil. Jawaban yang bagus.
klewis
43

Satu-satunya peringatan yang saya temukan dengan jawaban terbaik di atas adalah bahwa ia memperbarui modul ke versi terbaru. Ini berarti dapat memperbarui ke build alpha yang tidak stabil.

Saya akan menggunakan utilitas npm-check-updates. Grup saya menggunakan alat ini dan bekerja secara efektif dengan menginstal pembaruan stabil.

Seperti Etienne katakan di atas: instal dan jalankan dengan ini:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
Tyler Davis
sumber
3
rm -rf node_modulessebelum npm installmenyingkirkan beberapa peringatan ketergantungan untuk saya.
Michael Cole
1
Jika Anda memiliki "*" di package.json, cukup ubah ke "0" atau "0,0" atau "0,0.0" sebelum menjalankan npm-check-updates.
igorpavlov
Ini adalah cara termudah untuk melakukannya. Tidak perlu repot-repot. Bekerja seperti pesona. Semua deps Anda dimutakhirkan dan diinstal dengan benar. Thx
Yoraco Gonzales
38

Untuk melihat paket mana yang memiliki versi yang lebih baru, gunakan perintah berikut:

npm outdated

untuk memperbarui hanya satu ketergantungan cukup gunakan perintah berikut:

npm install yourPackage@latest --save

Sebagai contoh:

package.jsonFile saya memiliki ketergantungan:

"@progress/kendo-angular-dateinputs": "^1.3.1",

maka saya harus menulis:

npm install @progress/kendo-angular-dateinputs@latest --save
StepUp
sumber
Bagus tapi sepertinya --save (atau --save-dev) tidak wajib untuk diperbarui.
Burrich
35

Saya sangat suka cara kerja npm-upgrade . Ini adalah utilitas baris perintah sederhana yang melewati semua dependensi Anda dan memungkinkan Anda melihat versi saat ini dibandingkan dengan versi terbaru dan memperbarui jika Anda mau.

Berikut adalah tangkapan layar dari apa yang terjadi setelah berjalan npm-upgradedi root proyek Anda (di sebelah package.jsonfile):

contoh peningkatan npm

Untuk setiap ketergantungan Anda dapat memilih untuk meningkatkan, mengabaikan, melihat changelog, atau menyelesaikan proses. Sejauh ini, itu sangat berhasil bagi saya.

EDIT: Agar jelas ini adalah paket pihak ketiga yang perlu diinstal sebelum perintah akan berfungsi. Itu tidak datang dengan npm sendiri:

npm install -g npm-upgrade

Kemudian dari root proyek yang memiliki file package.json:

npm-upgrade
manncito
sumber
Melihat dokumen itu tampaknya itu hanya dibangun untuk bekerja dengan dependensi lokal
manncito
2
ya, baru saja disebutkan kepada orang lain. Tidak ada keluhan terhadap jawabannya :)
Martin Schneider
2
Hmm, npm-upgradetidak bekerja untuk saya, tetapi npm upgradeberhasil dan memperbarui file package.json saya yang persis apa yang saya cari.
Grandizer
Hmm menarik, apakah ada kesalahan? Gagasan di balik penggunaan npm-upgradeadalah Anda dapat melihat dengan tepat apa yang sedang ditingkatkan dan memilih mana yang akan ditingkatkan. npm upgrademungkin bekerja dengan baik untuk kebanyakan orang, tetapi kadang-kadang Anda perlu memiliki sedikit lebih banyak kontrol ketika meningkatkan
manncito
1
Anda juga dapat menggunakan ini dengan npx: npx npm-upgrade- cukup keren! :)
x-ray
22

Berikut ini adalah regex dasar yang cocok dengan nomor versi semantik sehingga Anda dapat dengan cepat menggantinya dengan asterisk.

Regex Versi Semantik

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Cara Penggunaan

Pilih versi paket yang ingin Anda ganti di file JSON.

tangkapan layar: pilih teks yang ingin Anda ganti

Masukkan regex di atas dan verifikasi cocok dengan teks yang benar.

tangkapan layar: masukan semver regex di atas

Ganti semua kecocokan dengan tanda bintang.

tangkapan layar: ganti versi paket dengan tanda bintang

Lari npm update --save

daniellmb
sumber
tidak ketika ada nomor dalam nama paket. yaitu: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Mungkin mencari penawaran / penawaran ganda di awal:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol
1
pada editor mana pun yang mendukung banyak tanda sisipan (misalnya Teks Sublime) Anda dapat memilih yang pertama :dan tekan ctrl+dbeberapa kali hingga Anda memilih semuanya, kemudian buka nomor versi (tekan panah kanan 2 kali) dan tekan spasi ctrl, lalu tulis"*"
Ivan Castellanos
15

Saya baru-baru ini harus memperbarui beberapa proyek yang menggunakan npm dan package.json untuk sihir gruntfile.js mereka. Perintah bash berikut (perintah multiline) bekerja dengan baik untuk saya:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

Idenya di sini: Untuk mem -pipe npm outdatedoutput sebagai json, to jq
(jq adalah parser / tool query json command)
(perhatikan penggunaan --depthargumen untuk npm outdated)
jq akan menghapus output ke hanya nama paket level atas saja.
akhirnya xargs menempatkan setiap LIBRARYNAME satu per satu ke dalam npm install LIBRARYNAME --save-devperintah

Di atas adalah apa yang bekerja untuk saya pada mesin runnning: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

ini diperlukan:
xargs http://en.wikipedia.org/wiki/Xargs (saya percaya pada mesin saya)
dan
jq http://stedolan.github.io/jq/ (saya menginstalnya dengan brew install jq)

Catatan: Saya hanya menyimpan pustaka yang diperbarui ke package.json di dalam kunci json devDependanciesdengan menggunakan --save-dev, itu adalah persyaratan proyek saya, sangat mungkin bukan milik Anda.

Setelah itu saya periksa bahwa semuanya sudah kuah dengan sederhana

npm outdated --depth=0

Juga, Anda dapat memeriksa versi pustaka tingkat atas yang diinstal saat ini dengan

npm list --depth=0
andxyz
sumber
Saya suka jq dan menggunakannya hampir setiap hari, tetapi untuk tujuan ini saya menggunakan sederhana awksebagai gantinya:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani
1
Saya telah menggunakancat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte
15

Jika Anda ingin menggunakan pendekatan yang lembut melalui antarmuka pelaporan interaktif yang indah (untuk terminal) saya sarankan menggunakan npm-check .

Ini kurang dari palu dan memberi Anda pengetahuan yang lebih penting, dan kontrol atas, pembaruan ketergantungan Anda.

Untuk memberi Anda gambaran tentang apa yang menunggu di sini adalah tangkapan layar (diambil dari halaman git untuk npm-check):

masukkan deskripsi gambar di sini

Benar
sumber
14

Fitur ini telah diperkenalkan di npm v5. perbarui ke npm menggunakan npm install -g npm@latestdan

untuk memperbaharui package.json

  1. hapus /node_modulesdanpackage-lock.json (if you have any)

  2. lari npm update. ini akan memperbarui paket dependensi . json ke yang terbaru, berdasarkan pada semver .

untuk memperbarui ke versi terbaru. kamu bisa pergi dengannpm-check-updates

Sibiraj
sumber
13

Jika Anda menggunakan benang, perintah berikut memperbarui semua paket ke versi terbarunya:

yarn upgrade --latest

Dari dokumen mereka :

The upgrade --latestupgrade Perintah paket yang sama seperti perintah upgrade, tapi mengabaikan berbagai versi ditentukan dalam package.json. Sebagai gantinya, versi yang ditentukan oleh tag terbaru akan digunakan (berpotensi meningkatkan paket di seluruh versi utama).

fotijr
sumber
1
Tidak memperbarui dependensi di package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
13

Pada npm versi 5.2.0, ada cara untuk menjalankan ini dalam satu baris tanpa menginstal paket tambahan ke registri npm global Anda atau secara lokal ke aplikasi Anda. Ini dapat dilakukan dengan memanfaatkan npxutilitas baru yang dibundel dengan npm. ( Klik di sini untuk mempelajari lebih lanjut. )

Jalankan perintah berikut di root proyek Anda:

npx npm-check-updates -u && npm i
ilyakam
sumber
Saya baru saja mencoba ini dan berfungsi ... kecuali saya harus menjalankan npm installuntuk mengunduh dependensi baru. Jadi saya kira ini hanya memperbarui package.json kecuali saya kehilangan sesuatu
owsega
@owsega, Anda memang benar, terima kasih! Saya mengubah jawaban saya agar juga berjalan npm installsetelah dependensi diperbarui.
ilyakam
13

Saya gunakan npm-checkuntuk mencapai ini.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

masukkan deskripsi gambar di sini

Daftar perintah lain yang berguna yang akan menyimpan nomor versi persis di package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i
Goksel
sumber
Ini ncu -udan bukan ncu -uadi baris terakhir kedua. Saya tidak dapat mengedit karena satu perubahan karakter tidak diperbolehkan. Sangat membantu.
Sohail Ahmed
10

Updtr!

Berdasarkan npm yang usang, updtr menginstal versi terbaru dan menjalankan tes npm untuk setiap ketergantungan. Jika pengujian berhasil, updtr menyimpan nomor versi baru ke package.json Anda. Namun, jika tes gagal, updtr mengembalikan perubahannya.

https://github.com/peerigon/updtr

David Braun
sumber
9

Perintah yang harus saya gunakan untuk memperbarui package.jsonuntuk NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Latar Belakang:

Saya menggunakan perintah terbaru dari @ josh3736 tetapi saya package.jsontidak diperbarui. Saya kemudian memperhatikan teks deskripsi saat menjalankan npm-check-updates -u:

Ketergantungan berikut dipenuhi oleh rentang versi yang dinyatakan, tetapi versi yang diinstal di belakang. Anda dapat menginstal versi terbaru tanpa mengubah file paket Anda dengan menggunakan pembaruan npm. Jika Anda ingin memperbarui dependensi dalam file paket Anda, jalankan ncu -a.

Membaca dokumentasi untuk npm-check-update Anda dapat melihat perbedaannya:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: menimpa file paket

-a, --upgradeAll: termasuk bahkan dependensi yang versi terbarunya memenuhi dependensi semver yang dideklarasikan

ncu adalah alias untuk npm-check-updatesseperti yang terlihat dalam pesan saat mengetiknpm-check-updates -u :

[INFO]: You can also use ncu as an alias
Ogglas
sumber
Dalam npm-check-updates v3, -aadalah perilaku default, dan menimpa package.json diserahkan sepenuhnya ke -uopsi.
Raine Revere
8

Jika Anda menggunakan yarn,yarn upgrade-interactive adalah alat yang benar-benar ramping yang dapat memungkinkan Anda untuk melihat dependensi Anda yang sudah usang dan kemudian memilih mana yang ingin Anda perbarui.

Lebih banyak alasan untuk menggunakan Benang npm. Heh.

Yangshun Tay
sumber
Benang bergerak cepat, mencapai 1,0 dan sudah sangat menyenangkan untuk digunakan. Ini harus menjadi jawaban baru yang dipilih.
Josh Habdas
1
Tidak memperbarui dependensi di package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
5

Perintah di atas tidak aman karena Anda mungkin merusak modul Anda ketika berpindah versi. Sebagai gantinya saya merekomendasikan yang berikut ini

  • Atur versi modul simpul aktual saat ini ke dalam package.json menggunakan npm shrinkwrapperintah.
  • Perbarui setiap ketergantungan ke versi terbaru JIKA TIDAK BREAK UJI ANDA menggunakan https://github.com/bahmutov/next-update alat baris perintah
npm instal -g pembaruan berikutnya
// dari paket Anda
pembaruan selanjutnya
gleb bahmutov
sumber
1
Perubahan mundur yang tidak kompatibel perlu dilindungi terhadap proyek-proyek aktif. OP lebih peduli untuk memulai proyek baru di mana Anda ingin memecahkan hal-hal sekarang daripada nanti dan memiliki versi terbaru untuk bekerja.
Raine Revere
3

Coba ikuti perintah jika Anda menggunakan npm 5 dan node 8

pembaruan npm - simpan

krunal shah
sumber
2
The updateperintah tampaknya tidak bertemu dependensi luar definisi asli. Jika package.jsonmenyatakan dengan "1.2.3"tepat Anda tidak akan mendapatkan 1.2.4. Itu bisa baik atau buruk :)
Álvaro González
3

Kode berikut (yang diterima) menulis kepada saya sesuatu seperti "terlalu lama bla-bla" dan tidak melakukan apa-apa. Mungkin menggunakan bendera global adalah masalahnya, idk.

npm i -g npm-check-updates
ncu -u
npm install

Saya memutuskan untuk menggunakan editor teks saya dan mengikuti pendekatan semi-manual.

Saya menyalin daftar seperti ini (lebih lama lagi) dari dependensi dev saya package.jsonke editor teks notepad ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Saya mengatur mode pencarian ke ekspresi reguler, menggunakan ^\s*"([^"]+)".*$pola untuk mendapatkan nama paket dan menggantinya dengan npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Klik pada "ganti semua". Otput adalah ini:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

Saya menyalinnya kembali ke bash dan tekan enter. Semuanya ditingkatkan dan berfungsi dengan baik. Itu saja.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

Saya tidak berpikir itu masalah besar, karena Anda harus melakukannya hanya sesekali, tetapi Anda dapat dengan mudah menulis skrip, yang mem-parsing package.jsondan meningkatkan paket Anda. Saya pikir lebih baik seperti ini, karena Anda dapat mengedit daftar Anda jika Anda memerlukan sesuatu yang istimewa, misalnya menjaga versi lib saat ini.

inf3rno
sumber
1
Dengan npm-check-update, terminal gantung adalah masalah yang diketahui pada Windows. Coba tambahkan --packageFile package.jsonsehingga tahu tidak perlu menunggu stdin.
Raine Revere
@RaineRevere Terima kasih!
inf3rno
3

Saya memecahkan masalah ini dengan melihat petunjuk dari https://github.com/tjunnone/npm-check-updates

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest
Sunil
sumber
3

Saya menemukan solusi lain untuk NPM versi terbaru. Yang ingin saya lakukan adalah mengganti semua dependensi "*" dengan nomor versi eksplisit terbaru. Tidak ada metode yang dibahas yang berhasil untuk saya.

Apa yang saya lakukan:

  1. Ganti semua "*" dengan "^ 0.0.0"
  2. Lari npm-check-updates -u

Semua yang ada di package.json sekarang diperbarui ke versi terakhir.

miqrc
sumber
3

Jika Anda tidak ingin menginstal pembaruan global npm-check- Anda dapat menjalankannya:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"
Yukulélé
sumber
2

Alternatifnya adalah

"dependencies":{
    "foo" : ">=1.4.5"
}

setiap kali Anda menggunakan pembaruan npm, pembaruan secara otomatis ke versi terbaru. Untuk sintaks versi lebih lanjut, Anda dapat memeriksa di sini: https://www.npmjs.org/doc/misc/semver.html

Haven
sumber
Salah satu alasan untuk pembuatan versi adalah untuk mencegah perubahan yang tidak kompatibel dari versi utama yang lebih baru. Saya akan merekomendasikan terhadap ini atau nomor versi '*'. OP terkait dengan pelonggaran proses sambil mempertahankan kontrol atas ketika itu terjadi.
Raine Revere
2

Solusi tanpa paket tambahan

Ubah versi setiap ketergantungan ke *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Kemudian jalankan npm update --save.

Beberapa paket Anda diperbarui, tetapi sebagian tidak?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

Ini bagian yang sulit, artinya versi "reaksi" lokal Anda lebih rendah daripada yang terbaru. Dalam hal ini npm mengunduh dan memperbarui paket "bereaksi". Namun versi lokal Anda "react-google-maps" sama dengan yang terbaru.

Jika Anda masih ingin "memperbarui" tidak berubah *, Anda harus menghapus modul-modul ini dari node_modulesfolder.

mis node_modules/react-google-maps. hapus .

Akhirnya lari lagi npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

Jangan lupa untuk menjalankan npm update --save-devjika Anda ingin memperbarui dependensi pengembangan.

Alexey Volodko
sumber
1

Greenkeeper jika Anda menggunakan Github. https://greenkeeper.io/

Ini adalah integrasi Github dan sangat mudah untuk mengatur segalanya. Ketika diinstal, secara otomatis membuat permintaan tarik di repositori yang Anda tentukan (atau semua jika diinginkan) dan menjaga kode Anda selalu mutakhir, tanpa memaksa Anda untuk melakukan sesuatu secara manual. PRs kemudian harus memicu pembangunan pada layanan CI dan tergantung pada pemeriksaan yang berhasil atau gagal Anda dapat terus mencari tahu apa yang memicu masalah atau ketika CI melewati hanya menggabungkan PR.

penjaga hijau PR 1 penjaga hijau PR 2

Di bagian bawah, Anda dapat melihat bahwa build pertama gagal pada awalnya dan setelah komit ("upgrade ke node v6.9") tes lulus sehingga saya akhirnya bisa menggabungkan PR. Hadir dengan banyak emoji juga.

Alternatif lain adalah https://dependencyci.com/ , namun saya tidak mengujinya secara intensif. Setelah penampilan pertama, Greenkeeper terlihat lebih baik di IMO umum dan memiliki integrasi yang lebih baik.

Luca Steeb
sumber
1
  • npm sudah ketinggalan zaman
  • pembaruan npm

Seharusnya Anda mendapatkan versi yang diinginkan terbaru yang kompatibel untuk aplikasi Anda. Tapi bukan versi terbaru.

webkitfanz
sumber