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 version
kemudian 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!
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Jawaban:
Sepertinya npm-check-update adalah satu-satunya cara untuk mewujudkannya sekarang.
Pada npm <3.11:
Cukup ubah setiap versi ketergantungan
*
, lalu jalankannpm update --save
. ( Catatan: rusak dalam versi terbaru (3.11) npm ).Sebelum:
Setelah:
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.sumber
*
dalam package.json karena Anda mungkin akhirnya secara otomatis menginstal versi modul baru dengan memecah perubahan yang merusak aplikasi Anda. Karena kami menggunakan di--save
sini,*
diganti dengan versi setiap paket saat ini.npm install --save
wildcard tersisa di sayapackage.json
.update
tidak 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?npm install -g npm-check-updates
untuk menginstal, kemudiannpm-check-updates
untuk memeriksa apakah dependensi Anda memiliki pembaruan, dannpm-check-updates -u
untuk memperbarui versi package.json Anda. Kemudian hanyanpm install
dan akan mengunduh versi baru.npm update --save
alih-alihnpm update --save-dev
.npm-check-updates
adalah utilitas yang secara otomatis menyesuaikan package.json dengan versi terbaru dari semua dependensilihat https://www.npmjs.org/package/npm-check-updates
[EDIT] Cara yang sedikit lebih mengganggu (menghindari instalasi global) jika Anda memiliki versi modern
npm
adalah:sumber
ncu -a
, tidak memperbarui package.json juga.Diperbarui untuk NPM terbaru
npm 2+ (Node 0.12+):
Npm kuno (sekitar 2014):
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-updates
ataunpm outdated
untuk menyarankan versi terbaru.Kemudian lakukan instalasi bersih (tanpa rm saya mendapat peringatan ketergantungan)
Terakhir, simpan versi yang tepat untuk
npm-shrinkwrap.json
dengannpm shrinkwrap
Sekarang,
npm install
sekarang akan menggunakan versi yang tepat dinpm-shrinkwrap.json
Jika Anda memeriksa
npm-shrinkwrap.json
git, 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).
npm sudah ketinggalan zaman
npm-periksa-pembaruan
npm shrinkwrap
ps Yarn mengirimkan daftar paket Anda ke Facebook .
sumber
npm-shrinkwrap.json
menjadi sumber, dan melakukan setiap kali Anda memperbarui, Anda selalu dapat 'kembali ke tempat Anda sebelumnya'. Saya mengabaikan fitur shrinkwrap ketika saya mulai.npm update
hanya pembaruan ke versi semver, bukan yang terbaru.yarn upgrade package@version
?Untuk memperbarui satu ketergantungan ke versi terbaru tanpa harus membukanya secara manual
package.json
dan mengubahnya, Anda dapat menjalankannyayaitu
Untuk referensi, instal npm
Sebagaimana dicatat oleh pengguna Vespakoen pada hasil edit yang ditolak, juga memungkinkan untuk memperbarui beberapa paket sekaligus dengan cara ini:
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.json
untuk hal-hal seperti itu;)sumber
npm install react-native-image-picker@* --save
ncu express mocha chai
. Anda juga dapat mengecualikan paket denganncu -x mocha
. Saya setuju bahwa di atas adalah solusi paling sederhana untuk memperbarui satu paket.npm install {package-name}@latest {save flags}
Jika Anda menggunakan Visual Studio Code sebagai IDE Anda, ini adalah ekstensi kecil yang menyenangkan untuk memperbarui
package.json
proses satu klik.Lensa Versi
sumber
Ini bekerja pada npm 1.3.15.
sumber
npm shrinkwrap
membekukan deps."react": "16.9.0"
dan kemudian saya menambahkan terbaru ke dalamnya dan berlarinpm 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
*
sebagai versi untuk rilis terbaru, termasuk tidak stabillatest
sebagai definisi versi untuk versi stabil terbaruLatestStablePackages
Berikut ini sebuah contoh:
sumber
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:
sumber
rm -rf node_modules
sebelumnpm install
menyingkirkan beberapa peringatan ketergantungan untuk saya.Untuk melihat paket mana yang memiliki versi yang lebih baru, gunakan perintah berikut:
untuk memperbarui hanya satu ketergantungan cukup gunakan perintah berikut:
Sebagai contoh:
package.json
File saya memiliki ketergantungan:maka saya harus menulis:
sumber
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-upgrade
di root proyek Anda (di sebelahpackage.json
file):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:
Kemudian dari root proyek yang memiliki file package.json:
sumber
npm-upgrade
tidak bekerja untuk saya, tetapinpm upgrade
berhasil dan memperbarui file package.json saya yang persis apa yang saya cari.npm-upgrade
adalah Anda dapat melihat dengan tepat apa yang sedang ditingkatkan dan memilih mana yang akan ditingkatkan.npm upgrade
mungkin bekerja dengan baik untuk kebanyakan orang, tetapi kadang-kadang Anda perlu memiliki sedikit lebih banyak kontrol ketika meningkatkannpx npm-upgrade
- cukup keren! :)Berikut ini adalah regex dasar yang cocok dengan nomor versi semantik sehingga Anda dapat dengan cepat menggantinya dengan asterisk.
Regex Versi Semantik
Cara Penggunaan
Pilih versi paket yang ingin Anda ganti di file JSON.
Masukkan regex di atas dan verifikasi cocok dengan teks yang benar.
Ganti semua kecocokan dengan tanda bintang.
Lari
npm update --save
sumber
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
dan tekanctrl+d
beberapa kali hingga Anda memilih semuanya, kemudian buka nomor versi (tekan panah kanan 2 kali) dan tekan spasi ctrl, lalu tulis"*"
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:
Idenya di sini: Untuk mem -pipe
npm outdated
output sebagai json, tojq
(jq adalah parser / tool query json command)
(perhatikan penggunaan
--depth
argumen untuknpm 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-dev
perintahDi 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
devDependancies
dengan menggunakan--save-dev
, itu adalah persyaratan proyek saya, sangat mungkin bukan milik Anda.Setelah itu saya periksa bahwa semuanya sudah kuah dengan sederhana
Juga, Anda dapat memeriksa versi pustaka tingkat atas yang diinstal saat ini dengan
sumber
awk
sebagai gantinya:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
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):
sumber
Fitur ini telah diperkenalkan di
npm v5
. perbarui ke npm menggunakannpm install -g npm@latest
danuntuk memperbaharui
package.json
hapus
/node_modules
danpackage-lock.json (if you have any)
lari
npm update
. ini akan memperbarui paket dependensi . json ke yang terbaru, berdasarkan pada semver .untuk memperbarui ke versi terbaru. kamu bisa pergi dengan
npm-check-updates
sumber
Jika Anda menggunakan benang, perintah berikut memperbarui semua paket ke versi terbarunya:
yarn upgrade --latest
Dari dokumen mereka :
sumber
package.json
- github.com/yarnpkg/yarn/issues/4390Pada 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
npx
utilitas baru yang dibundel dengan npm. ( Klik di sini untuk mempelajari lebih lanjut. )Jalankan perintah berikut di root proyek Anda:
sumber
npm install
untuk mengunduh dependensi baru. Jadi saya kira ini hanya memperbarui package.json kecuali saya kehilangan sesuatunpm install
setelah dependensi diperbarui.Saya gunakan
npm-check
untuk mencapai ini.Daftar perintah lain yang berguna yang akan menyimpan nomor versi persis di
package.json
sumber
ncu -u
dan bukanncu -ua
di baris terakhir kedua. Saya tidak dapat mengedit karena satu perubahan karakter tidak diperbolehkan. Sangat membantu.Updtr!
https://github.com/peerigon/updtr
sumber
Perintah yang harus saya gunakan untuk memperbarui
package.json
untukNPM 3.10.10
:Latar Belakang:
Saya menggunakan perintah terbaru dari @ josh3736 tetapi saya
package.json
tidak diperbarui. Saya kemudian memperhatikan teks deskripsi saat menjalankannpm-check-updates -u
:Membaca dokumentasi untuk npm-check-update Anda dapat melihat perbedaannya:
https://www.npmjs.com/package/npm-check-updates
ncu adalah alias untuk
npm-check-updates
seperti yang terlihat dalam pesan saat mengetiknpm-check-updates -u
:sumber
-a
adalah perilaku default, dan menimpa package.json diserahkan sepenuhnya ke-u
opsi.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.sumber
package.json
- github.com/yarnpkg/yarn/issues/4390Perintah di atas tidak aman karena Anda mungkin merusak modul Anda ketika berpindah versi. Sebagai gantinya saya merekomendasikan yang berikut ini
npm shrinkwrap
perintah.sumber
Coba ikuti perintah jika Anda menggunakan npm 5 dan node 8
pembaruan npm - simpan
sumber
update
perintah tampaknya tidak bertemu dependensi luar definisi asli. Jikapackage.json
menyatakan dengan"1.2.3"
tepat Anda tidak akan mendapatkan1.2.4
. Itu bisa baik atau buruk :)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.
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.json
ke editor teks notepad ++:Saya mengatur mode pencarian ke ekspresi reguler, menggunakan
^\s*"([^"]+)".*$
pola untuk mendapatkan nama paket dan menggantinya dengannpm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Klik pada "ganti semua". Otput adalah ini:Saya menyalinnya kembali ke bash dan tekan enter. Semuanya ditingkatkan dan berfungsi dengan baik. Itu saja.
Saya tidak berpikir itu masalah besar, karena Anda harus melakukannya hanya sesekali, tetapi Anda dapat dengan mudah menulis skrip, yang mem-parsing
package.json
dan 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.sumber
--packageFile package.json
sehingga tahu tidak perlu menunggu stdin.Saya memecahkan masalah ini dengan melihat petunjuk dari https://github.com/tjunnone/npm-check-updates
sumber
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:
npm-check-updates -u
Semua yang ada di package.json sekarang diperbarui ke versi terakhir.
sumber
Jika Anda tidak ingin menginstal pembaruan global npm-check- Anda dapat menjalankannya:
sumber
Alternatifnya adalah
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
sumber
Solusi tanpa paket tambahan
Ubah versi setiap ketergantungan ke
*
:Kemudian jalankan
npm update --save
.Beberapa paket Anda diperbarui, tetapi sebagian tidak?
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 darinode_modules
folder.mis
node_modules/react-google-maps
. hapus .Akhirnya lari lagi
npm update --save
.Jangan lupa untuk menjalankan
npm update --save-dev
jika Anda ingin memperbarui dependensi pengembangan.sumber
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.
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.
sumber
Seharusnya Anda mendapatkan versi yang diinginkan terbaru yang kompatibel untuk aplikasi Anda. Tapi bukan versi terbaru.
sumber