Warum hat package-lock.json den Integritäts-Hash von sha1 in sha512 geändert?


120

Ich habe gerade eine neue npm-Sperrdatei, package-lock.json, als Teil meines typischen Workflows generiert. Aber ich habe festgestellt, dass diesmal alle Integritäts-Hashes von sha1 auf sha512 geändert wurden. Was passiert hier?

Geben Sie hier die Bildbeschreibung ein

"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
Es ist ein Problem mit npm: github.com/npm/npm/issues/17749
Vlad

1
Das oben genannte Problem wurde geschlossen und jetzt wird ein Artikel erstellt, der Anweisungen zur Lösung dieses Problems enthält: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Antworten:


105

Soweit ich sehen kann, hat npm die Integritätsprüfsumme von sha1 in sha512 geändert.

Wenn Ihre Git-Änderungen von sha1 zu sha512 wechseln, sollten Sie dieses Update einmal durchführen, und danach ist es gut.

Wenn jemand anderes mit der Codebasis arbeitet und sieht, dass sich ein Git von sha512 auf sha1 ändert (was das Problem ist, das ich hatte), können Sie es beheben, indem Sie Folgendes ausführen:

Verwerfen Sie die Änderungen in git für package-lock.json

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

Dadurch wird npm aktualisiert und alle Ihre Pakete neu installiert, sodass die neue Prüfsumme (sha512) vorhanden ist.


1
Gibt es einen Grund, sha512 über sha1 zu verwenden? Mein Computer wird derzeit für unsere Umgebung auf sha1 geändert.
Elijah1210

@ Elijah1210 Ich werde weniger Möglichkeiten vermuten, den Hash mit einer Kollision zu "fälschen"?
Pureferret

20
Das war in meinem Fall nicht ausreichend. Zusätzlich zum Löschen des node_modulesOrdners brauchte ich npm cache clear --forceauch.
Lorenz Meyer

37

Aufbauend auf dem, was Dave geantwortet hat. Das Update, das ich gefunden habe, war das Folgende:

npm i -g npm

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

Wir haben dies für alle unsere Entwickler gleichzeitig getan und damit das Problem zwischen sha-512 und sha-1 gestoppt, das zu frustrierenden Zusammenführungskonflikten führte.


6

Siehe auch https://github.com/npm/npm/issues/17749, das zwar behauptet, das Problem sei "behoben", aber nicht. Das Entfernen node_modulesist eine Problemumgehung.

Möglicherweise besteht eine Beziehung zu Betriebssystemen. Wir treffen dies gerade mit Entwicklern auf Linux- und Windows-Plattformen.


3
Es ist Monate her, seit dies veröffentlicht wurde, und ich leide immer noch darunter. es bringt mich um
Chad Ruppert

2
Am Ende sind wir zum Garn übergegangen.

1
Jedes NPM-Problem, das scheinbar durch den Umzug nach Yarn
Solvitieg am

2

Als @Daniel Cumings musste ich auch die entfernen package-lock.json, um die sha1-Hashes loszuwerden. Hier sind die Windows-CLI-Befehle als Referenz, die dasselbe wie Daniels Skript tun:

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

1

Ich arbeite in einem großen Team. Es npmist schwierig und nicht zuverlässig, jeden Entwickler dazu zu zwingen, einen sauberen Cache zu erzwingen . Auch das hilft nicht jedes Mal. Für alle, die immer noch mit diesem npm-Problem konfrontiert sind (genau wie ich) und nichts anderes hilft, probieren Sie dieses Git-basierte Tool aus, das ich kürzlich erstellt habe: https://github.com/kopach/lockfix . Es werden sha512 -> sha1Integritätsänderungen der Sperrdateien von npm zurückgesetzt. Wenn Sie dies zu Ihrem postshrinkwrapSkript von package.json- hinzufügen, sollten Sie schließlich alle Integritätseigenschaften festlegen sha512und die Sperrdatei konsistent haben.

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

0

Aufbauend auf früheren Kommentaren und Vorschlägen musste ich für mich den vorhandenen Ordner node_modules und den Cache löschen und dann die Datei sha512 package-lock.json von git (die von einem anderen Computer festgeschrieben wurde) abrufen und schließlich ein npm i ausführen . Etwas wie das:

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

Danach verwendete package-lock.json sha512 und andere Änderungen stabilisierten sich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.