ทำไม package-lock.json จึงเปลี่ยนแฮชความสมบูรณ์จาก sha1 เป็น sha512


121

ฉันเพิ่งสร้างไฟล์ล็อก npm ใหม่ package-lock.json ซึ่งเป็นส่วนหนึ่งของเวิร์กโฟลว์ทั่วไปของฉัน แต่ฉันสังเกตว่าคราวนี้แฮชความสมบูรณ์ทั้งหมดได้เปลี่ยนจาก sha1 เป็น sha512 เกิดอะไรขึ้นที่นี่?

ใส่คำอธิบายภาพที่นี่

"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==",
    […]
}

1
เป็นปัญหากับ npm: github.com/npm/npm/issues/17749
Vlad Minaev

1
ปัญหาที่อ้างถึงข้างต้นถูกปิดแล้วและตอนนี้มีการสร้างบทความเพื่อแนะนำวิธีการแก้ปัญหานี้: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

คำตอบ:


106

จากสิ่งที่ฉันเห็น npm เปลี่ยนการตรวจสอบความสมบูรณ์จาก sha1 เป็น sha512

หากการเปลี่ยนแปลงคอมไพล์ของคุณเปลี่ยนจาก sha1 เป็น sha512 คุณควรทำการอัปเดตครั้งเดียวและจะดีหลังจากนั้น

หากมีคนอื่นที่ทำงานกับ codebase และเห็นการเปลี่ยนแปลง git จาก sha512 เป็น sha1 (ซึ่งเป็นปัญหาที่ฉันพบ) คุณสามารถแก้ไขได้โดยเรียกใช้สิ่งต่อไปนี้:

ยกเลิกการเปลี่ยนแปลงใน git สำหรับ package-lock.json

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

การดำเนินการนี้จะอัปเดต npm และติดตั้งแพ็กเกจทั้งหมดของคุณใหม่เพื่อให้มีการตรวจสอบใหม่ (sha512)


1
มีเหตุผลที่จะใช้ sha512 กับ sha1 หรือไม่? ปัจจุบันคอมพิวเตอร์ของฉันเปลี่ยนเป็น sha1 สำหรับสภาพแวดล้อมของเรา
Elijah1210

@ Elijah1210 ฉันจะเดาความเป็นไปได้น้อยกว่าที่จะ 'แกล้ง' แฮชด้วยการชนกัน?
Pureferret

20
สิ่งนี้ไม่เพียงพอในกรณีของฉัน นอกจากลบnode_modulesโฟลเดอร์แล้วฉันก็ต้องการnpm cache clear --forceเช่นกัน
Lorenz Meyer

37

สร้างจากสิ่งที่ Dave ตอบ การแก้ไขที่ฉันพบคือทำสิ่งต่อไปนี้:

npm i -g npm

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

เราทำสิ่งนี้ให้กับนักพัฒนาของเราทุกคนในเวลาเดียวกันและสิ่งนี้ช่วยหยุดปัญหา sha-512 vs sha-1 ซึ่งทำให้เกิดความขัดแย้งในการผสานที่น่าหงุดหงิด


6

โปรดดูhttps://github.com/npm/npm/issues/17749ซึ่งแม้จะอ้างว่าปัญหา 'แก้ไขแล้ว' แต่ก็ไม่ได้เป็นเช่นนั้น การนำออกnode_modulesเป็นวิธีแก้ปัญหาชั่วคราว

อาจมีความสัมพันธ์กับระบบปฏิบัติการ เรากำลังทำสิ่งนี้กับนักพัฒนาบนแพลตฟอร์ม Linux และ Windows


3
เป็นเวลาหลายเดือนแล้วที่มีการโพสต์สิ่งนี้และฉันยังคงทุกข์ทรมานจากสิ่งนี้ มันคือการฆ่าฉัน
Chad Ruppert

2
เราย้ายไปที่เส้นด้ายในที่สุด

1
ทุกปัญหา NPM ดูเหมือนจะได้รับการแก้ไขโดยการย้ายไปที่ Yarn
Solvitieg

2

ในฐานะ @Daniel Cumings ฉันก็ต้องลบpackage-lock.jsonเพื่อกำจัดแฮช sha1 ด้วย นี่คือคำสั่ง Windows CLIสำหรับการอ้างอิงซึ่งเหมือนกับสคริปต์ของ Daniel:

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

2

ฉันทำงานในทีมใหญ่ การบังคับให้นักพัฒนาทุกคนบังคับล้างnpmแคชเป็นเรื่องยากและไม่น่าเชื่อถือ นอกจากนี้สิ่งนี้ไม่ได้ช่วยทุกครั้ง ดังนั้นสำหรับคนที่ยังคงเผชิญปัญหานี้ NPM (เหมือนผม) และไม่มีอะไรอื่นช่วย - ลองนี้เครื่องมือคอมไพล์ตามที่ฉันสร้างขึ้นเมื่อเร็ว ๆ นี้: https://github.com/kopach/lockfix มันจะย้อนกลับsha512 -> sha1การเปลี่ยนแปลงความสมบูรณ์ของไฟล์ล็อคของ npm หากคุณเพิ่มสิ่งนี้ลงในpostshrinkwrapสคริปต์ของpackage.jsonคุณ - ในที่สุดคุณควรได้รับคุณสมบัติความสมบูรณ์ทั้งหมดที่ตั้งค่าเป็นsha512และมีไฟล์ล็อกที่สอดคล้องกัน

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

0

การสร้างความคิดเห็นและคำแนะนำก่อนหน้านี้เพิ่มเติมสำหรับฉันฉันต้องล้างโฟลเดอร์ node_modules ที่มีอยู่แคชจากนั้นคว้าไฟล์ sha512 package-lock.json จาก git (ซึ่งได้รับการยืนยันจากคอมพิวเตอร์เครื่องอื่น) และในที่สุดก็ทำ npm i . สิ่งนี้:

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

หลังจาก package-lock.json นี้ใช้ sha512 และการเปลี่ยนแปลงอื่น ๆ เสถียร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.