Dlaczego pakiet package-lock.json zmienił skrót integralności z sha1 na sha512?


121

Właśnie wygenerowałem nowy plik blokujący npm, package-lock.json, jako część mojego typowego przepływu pracy. Ale zauważyłem, że tym razem wszystkie skróty integralności zostały zmienione z sha1 na sha512. Co tu się dzieje?

wprowadź opis obrazu tutaj

"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
Jest to problem z npm: github.com/npm/npm/issues/17749
Vlad Minaev

1
Problem, o którym mowa powyżej, został zamknięty i teraz jest tworzony artykuł instruujący, jak rozwiązać ten problem: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Odpowiedzi:


105

Z tego co widzę, npm zmienił sumę kontrolną integralności z sha1 na sha512.

Jeśli twoje zmiany git przechodzą z sha1 do sha512, powinieneś zrobić tę aktualizację raz, a potem będzie dobrze.

Jeśli ktoś inny pracuje z bazą kodu i widzi zmianę gita z sha512 na sha1 (co jest problemem, który miałem), możesz to naprawić, uruchamiając następujące polecenie:

Odrzuć zmiany w git dla package-lock.json

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

Spowoduje to zaktualizowanie npm i ponowne zainstalowanie wszystkich pakietów, tak aby była obecna nowa suma kontrolna (sha512).


1
Czy jest powód, aby używać sha512 zamiast sha1? Mój komputer jest obecnie tym, który zmienia się na sha1 dla naszego środowiska.
Elijah1210,

@ Elijah1210 Mam zamiar zgadywać mniejszą możliwość „sfałszowania” haszyszu z kolizją?
Pureferret

20
W moim przypadku to nie wystarczyło. Oprócz usunięcia node_modulesfolderu potrzebowałem npm cache clear --forceteż.
Lorenz Meyer

37

Opierając się na tym, co odpowiedział Dave. Znaleziona przeze mnie poprawka polegała na wykonaniu następujących czynności:

npm i -g npm

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

Zrobiliśmy to dla wszystkich naszych programistów w tym samym czasie i to zatrzymało problem sha-512 vs sha-1, który powodował frustrujące konflikty przy scalaniu.


6

Zobacz też https://github.com/npm/npm/issues/17749, który chociaż twierdzi, że problem został „naprawiony”, tak nie jest. Usunięcie node_modulesjest obejściem.

Może istnieć związek z systemami operacyjnymi. Robimy to teraz z programistami na platformach Linux i Windows.


3
minęły miesiące, odkąd to zostało opublikowane, a ja nadal cierpię z tego powodu. to KILLING ME
Chad Ruppert

2
W końcu przeszliśmy do przędzy.

1
Każdy problem NPM pozornie rozwiązany przez przeniesienie się do Yarn
Solvitieg

2

Jako @Daniel Cumings musiałem również usunąć, package-lock.jsonaby pozbyć się skrótów sha1. Oto polecenia interfejsu wiersza polecenia systemu Windows w celach informacyjnych, które działają tak samo, jak skrypt Daniela:

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

2

Pracuję w dużym zespole. Zmuszanie każdego programisty do wymuszania czyszczenia npmpamięci podręcznej jest trudne i zawodne. Poza tym to nie pomaga za każdym razem. Tak więc, dla każdego, kto nadal boryka się z tym problemem npm (tak samo jak ja) i nic innego nie pomaga - wypróbuj to narzędzie oparte na git, które niedawno zbudowałem: https://github.com/kopach/lockfix . Przywraca sha512 -> sha1zmiany integralności plików blokujących npm. Jeśli dodasz to do swojego postshrinkwrapskryptu package.json- powinieneś ostatecznie ustawić wszystkie właściwości integralności sha512i mieć spójny plik blokady.

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

0

Kontynuując opierając się na poprzednich komentarzach i sugestiach, musiałem wyczyścić istniejący folder node_modules, pamięć podręczną, a następnie pobrać plik sha512 package-lock.json z git (który został zatwierdzony z innego komputera) i na koniec wykonać npm i . Coś takiego:

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

Po tym pakiecie lock.json użył sha512 i inne zmiany ustabilizowały się.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.