Bagaimana cara memperbaiki paket npm yang rentan di package-lock.json saya yang tidak terdaftar di package.json?

91

Github memberi tahu saya bahwa dependensi dalam file package-lock.json saya rentan dan ketinggalan zaman. Masalahnya adalah jika saya melakukan npm installatau npm update, tak satu pun dari mereka memperbarui ketergantungan di file package-lock.json.

Saya telah melakukan banyak googling tentang ini, serta menghapus file dan selesai npm install.

Jika ada yang bisa membantu menyelesaikan ini, saya akan sangat menghargainya. Paket yang dimaksud adalah Hoek, yang sebenarnya tidak saya miliki di file package.json saya.

Terima kasih banyak sebelumnya.

Raph117
sumber
2
coba hapus paket-lock.json Anda dan jalankan npm install lagi
Rishikesh Dhokare
1
Anda dapat memeriksa dependensi Anda untuk mengetahui mana yang bergantung pada hoek dan memperbarui yang itu. (Tapi Anda juga bisa kurang beruntung dan ketergantungan itu tidak memiliki versi yang lebih baru.)
Roland Starke
Saya akan menyarankan hal yang sama dari @RishikeshDhokare
xpto
Saya melakukan seperti yang dikatakan @RishikeshDhokare. Masalah terpecahkan sendiri
melih sahin

Jawaban:

41

Kedengarannya seperti Hoek adalah dependensi dari salah satu dependensi Anda (jadi, paket yang Anda miliki di package.json membutuhkannya dari package.json itu sendiri).

Anda sudah mencoba menghapus / menginstal ulang dan memperbarui dependensi proyek Anda tetapi tidak berhasil, jadi tampaknya dependensi paket yang dipermasalahkan memiliki versi eksplisit atau maks yang ditentukan.

Tanpa melihat package.json untuk setiap dependensi Anda, akan sulit untuk memberi saran lebih lanjut tentang cara memaksa pembaruan.

Edit: Untuk membantu Anda mengidentifikasi paket mana yang menggunakan dependensi mana, Anda dapat menggunakan lsperintah NPM : https://docs.npmjs.com/cli/ls

Misalnya, untuk melihat paket mana yang menggunakan Hoek: npm ls hoek

Edit 2: Seperti yang ditunjukkan Ulysse BN dengan benar, jika Anda memiliki NPM versi 6 atau yang lebih baru, Anda dapat menggunakan npm audit fixuntuk meminta NPM mencoba memperbaiki kerentanan untuk Anda.

Edit 3: Mereka yang membaca ini juga harus memeriksa jawaban JBallin di bawah ini. Ini memperluas informasi yang saya berikan di sini, dan (menurut saya) merupakan jawaban yang lebih terstruktur yang menjawab pertanyaan OP dengan lebih baik. Namun - jika Anda ingin perbaikan cepat - jawaban ini sudah cukup.

Alex Mulchinock
sumber
3
Saya mengalami masalah serupa dengan paket berbeda (Growl). Saya menduga itu adalah beberapa versi dari sesuatu dalam diri saya package.jsonyang bergantung pada versi Growl yang spesifik (rentan). Jawaban Anda ada di jalur yang benar dan Anda mungkin bisa berhasil jika Anda dapat membagikan perintah yang akan menunjukkan paket mana package.jsonyang bergantung pada paket rentan yang muncul package-lock.json.
Fuhrmanator
Lihat jawaban yang diperbarui. Jika Anda membutuhkan bantuan tambahan - buat pertanyaan baru. :)
Alex Mulchinock
Terima kasih. Selesai: stackoverflow.com/questions/50764225/…
Fuhrmanator
Apakah Anda yakin bahwa pertanyaan tambahan dijamin? Mereka tampak seperti duplikat.
JBallin
@JBallin jawaban saya telah diperbarui beberapa kali sejak. Ini mungkin tidak memiliki kualifikasi sebagai duplikat aslinya.
Alex Mulchinock
24

TLDR: Perbarui paket induk menggunakan npm i $PARENT_PKG_NAME.


Catatan

Saat memperbarui dependensi, Anda harus meninjau CHANGELOG untuk setiap perubahan yang mengganggu.

Diagnosa

npm auditakan mengungkapkan paket yang rentan (perhatikan bahwa Anda memerlukan file package-lock.json untuk ini, jadi Anda harus menjalankannya npm i), serta paket yang menjadi dependensinya (jika ada). Perhatikan bahwa Anda juga dapat menggunakan npm ls $CHILD_PKG_NAMEuntuk melihat dependensi induknya.

Percobaan Perbaikan Cepat

npm audit fixdan npm audit fix --forcepatut dicoba, tetapi terkadang perbaikan perlu dilakukan secara manual (lihat di bawah).

Perbaikan Manual

Kemungkinan besar paket induk telah memperbaiki dependensinya (Anda dapat memverifikasi ini dengan membuka GitHub mereka dan meninjau komit terbaru - atau hanya melihat apakah ini memperbaikinya), jadi Anda dapat menjalankannya npm i $PARENT_PKG_NAME @$NEW_VERSIONdan itu akan memperbarui kunci paket Anda .json.

Jika orang tua belum memperbaiki kerentanannya

Jika pengelola tampaknya tidak responsif, Anda dapat mempertimbangkan untuk menggunakan paket alternatif yang menyelesaikan hal yang sama atau membagi paket dan memperbarui kerentanannya sendiri.

Verifikasi Perbaikan

Anda sekarang dapat memverifikasi bahwa itu berfungsi dengan menjalankan npm auditdan memastikan bahwa tidak ada kerentanan yang muncul. Komit perubahan Anda, dorong ke GitHub, segarkan pemberitahuan / peringatan Anda dan itu akan hilang!

JBallin
sumber
Bagaimana dengan kasus saya Quick Fix tidak berfungsi baik manual dalam jawaban ini karena induknya adalah kerangka kerja yang dalam pembaruan berubah sepenuhnya API dan bahkan menyingkirkan pustaka itu? Ini karena pekerjaan induknya masih menggunakan pustaka lama. Memang yang lama masih dipertahankan tapi belum diperbarui, maksud saya bagaimana saya bisa melanjutkan?
Carmine Tambascia
1
@CarmineTambascia jika paket yang Anda gunakan tidak memperbaiki kerentanannya (saya akan membuka masalah / PR dengan harapan akan diperbaiki) - Saya akan mempertimbangkan untuk membuat garpu paket Anda sendiri, perbaiki vuln, di tempat paket yang terpengaruh.
JBallin
apakah ada cara untuk memperbarui paket anak? Dalam kasus di mana paket induk belum diperbaiki untuk kerentanannya?
Harshita
@Harshita lihat bagian berjudul "Jika orang tua belum memperbaiki kerentanan"
JBallin
1
@Harshita, apakah Anda sudah menjangkau mereka? Itu demi kepentingan mereka untuk memperbaiki kerentanan itu juga.
JBallin
6

Jika Anda memiliki npm @ 6 atau yang lebih baru, Anda dapat menggunakannya npm audit fixuntuk masalah keamanan Anda.

Ulysse BN
sumber
Ada banyak alat berbeda dan mereka tidak memiliki basis data kerentanan yang sama. Yang menurut saya paling lengkap adalah Snytch.
Ulysse BN
2

Menggunakan:

npm i hoek

npm akan menginstal versi terbaru hoek dan package.lock.json Anda akan diperbarui.

kalajengking
sumber
0

Saya mengalami masalah ini dan menemukan bahwa itu karena server tempat saya menjalankan npm memiliki versi lama npm di atasnya- package-lock.json hanya didukung oleh versi yang lebih baru.

jvvw
sumber
0

apakah Anda mencoba ini: buka root proyek Anda, hapus package-lock.jsonfile, node_modulesdan .cachefolder, lalu npm install.

KueL
sumber
0

Untuk memeriksa paket npm yang rentan, cukup gunakan perintah berikut:

npm audit

Untuk memperbaiki paket npm yang rentan, cukup gunakan perintah berikut yang juga akan memperbaiki package-lock.json:

npm audit fix
Jerry Chong
sumber
0

Edit package-lock.jsonsecara manual dan perbarui versi paket yang rentan ke yang diperbaiki dan kemudian gunakan

npm ci

Itu akan menginstal paket sesuai package-lock.jsondengan mengabaikannya package.jsonterlebih dahulu. Kemudian gunakan

npm audit fix

sekali lagi, untuk memastikan apakah itu dilakukan dengan benar. Jika tidak membantu, gunakan solusi lain yang diberikan.

Informasi lebih lanjut di sini:

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

atau di sini: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

Kesepian
sumber
Solusi tambahan bisa jadi: npmjs.com/package/npm-check-updates
Lonely
-3

Setelah menginstal dependensi baru, jalankan perintah berikut untuk memperbarui file package-lock.json:

npm update package-lock.json
SA911
sumber