Mengapa package-lock.json mengubah hash integritas dari sha1 menjadi sha512?

121

Saya baru saja membuat lockfile npm baru, package-lock.json, sebagai bagian dari alur kerja khas saya. Tapi saya perhatikan bahwa kali ini semua hash integritas telah diubah dari sha1 menjadi sha512. Apa yang terjadi disini?

masukkan deskripsi gambar di sini

"chalk": {
    "version": "2.0.1",
    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
-   "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+   "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
    […]
}
Matt
sumber
1
Ini masalah dengan npm: github.com/npm/npm/issues/17749
Vlad Minaev
1
Masalah yang dirujuk di atas telah ditutup dan sekarang sebuah artikel dibuat untuk menginstruksikan bagaimana memecahkan masalah ini: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Jawaban:

105

Dari apa yang saya lihat, npm mengubah checksum integritas dari sha1 menjadi sha512.

Jika perubahan git Anda beralih dari sha1 ke sha512, Anda harus melakukan pembaruan itu sekali dan setelah itu akan bagus.

Jika orang lain bekerja dengan basis kode dan melihat perubahan git dari sha512 ke sha1 (yang merupakan masalah yang saya alami), Anda dapat memperbaikinya dengan menjalankan perintah berikut:

Buang perubahan di git untuk package-lock.json

npm i -g npm
rm -rf node_modules/
npm i

Ini akan memperbarui npm dan menginstal ulang semua paket Anda sehingga checksum baru (sha512) hadir.

Dave
sumber
1
Apakah ada alasan untuk menggunakan sha512 daripada sha1? Komputer saya saat ini yang berubah menjadi sha1 untuk lingkungan kita.
Elijah1210
@ Elijah1210 Saya akan menebak kemungkinan kecil untuk 'memalsukan' hash dengan tabrakan?
Pureferret
20
Ini tidak cukup dalam kasus saya. Selain menghapus node_modulesfolder, saya npm cache clear --forcejuga perlu .
Lorenz Meyer
37

Membangun dari apa yang dijawab Dave. Perbaikan yang saya temukan adalah melakukan hal berikut:

npm i -g npm

cd {working directory}
rm -rf node_modules/
rm package-lock.json
npm cache clear --force
npm i

Kami melakukan ini untuk semua pengembang kami pada saat yang sama dan ini menghentikan masalah sha-512 vs sha-1 yang menyebabkan konflik penggabungan yang membuat frustrasi.

Daniel Cumings
sumber
6

Lihat juga https://github.com/npm/npm/issues/17749 yang meskipun mengklaim bahwa masalahnya sudah 'diperbaiki', sebenarnya tidak. Menghapus node_modulesadalah solusi.

Mungkin ada hubungan dengan sistem operasi. Kami sedang melakukan ini sekarang dengan pengembang di platform Linux dan Windows.


sumber
3
sudah berbulan-bulan sejak ini diposting, dan saya masih menderita karenanya. ini MEMBUNUH SAYA
Chad Ruppert
2
Kami pindah ke benang pada akhirnya.
1
Setiap masalah NPM tampaknya diselesaikan dengan pindah ke Yarn
Solvitieg
2

Sebagai @Daniel Cumings, saya juga harus menghapus package-lock.jsonuntuk menyingkirkan hash sha1. Berikut perintah Windows CLI untuk referensi, yang berfungsi sama dengan skrip Daniel:

npm i -g npm
rd /s /q "node_modules"
del package-lock.json
npm cache clear --force
npm i
Marcel
sumber
2

Saya bekerja di tim besar. Memaksa setiap pengembang untuk memaksa membersihkan npmcache itu sulit dan tidak dapat diandalkan. Juga, ini tidak membantu setiap saat. Jadi, bagi siapa saja yang masih menghadapi masalah npm ini (sama seperti saya) dan tidak ada yang membantu - coba alat berbasis git yang saya buat baru-baru ini: https://github.com/kopach/lockfix . Ini sha512 -> sha1mengembalikan perubahan integritas file kunci npm. Jika Anda menambahkan ini ke postshrinkwrapskrip package.json- Anda pada akhirnya akan mendapatkan semua properti integritas yang disetel sha512dan memiliki file kunci yang konsisten.

npm install --save-dev lockfix
"scripts": {
    "postshrinkwrap": "lockfix",
},
Ihor
sumber
0

Lebih lanjut membangun komentar dan saran sebelumnya, bagi saya, saya perlu menghapus folder node_modules yang ada, cache, dan kemudian ambil file sha512 package-lock.json dari git (yang dilakukan dari komputer lain), dan akhirnya melakukan npm i . Sesuatu seperti ini:

npm i -g npm
rm -rf node_modules/
npm cache clear --force
git reset --hard
npm i

Setelah paket-lock.json menggunakan sha512 dan perubahan lainnya distabilkan.

Mike Benna
sumber