Почему 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
Влад Минаев

1
Проблема, о которой говорилось выше, была закрыта, и теперь создается статья с инструкциями по ее решению: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Кайл Беркетт

Ответы:


106

Насколько я могу судить, npm изменил контрольную сумму целостности с sha1 на sha512.

Если ваши изменения git переходят с sha1 на sha512, вы должны сделать это обновление один раз, и после этого все будет хорошо.

Если кто-то другой работает с кодовой базой и видит изменение 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тоже понадобилось .
Лоренц Мейер

37

Основываясь на том, что ответил Дэйв. Исправление, которое я нашел, заключалось в следующем:

npm i -g npm

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

Мы сделали это для всех наших разработчиков одновременно, и это остановило проблему sha-512 и sha-1, которая вызывала неприятные конфликты слияния.


6

См. Также https://github.com/npm/npm/issues/17749, где утверждается, что проблема «исправлена», но это не так. Удаление node_modules- это обходной путь.

Может быть связь с операционными системами. Мы достигаем этого прямо сейчас с разработчиками платформ Linux и Windows.


3
Прошло несколько месяцев с тех пор, как это было опубликовано, и я все еще страдаю от этого. ЭТО УБИВАЕТ МЕНЯ
Чад Рупперт

2
В конце концов, мы перешли к пряже.


2

Как @Daniel Cumings мне также пришлось удалить, package-lock.jsonчтобы избавиться от хэшей sha1. Вот команды Windows CLI для справки, которые делают то же самое, что и сценарий Дэниела:

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

2

Я работаю в большой команде. Заставить каждого разработчика принудительно очистить npmкеш сложно и ненадежно. Кроме того, это помогает не каждый раз. Итак, для тех, кто все еще сталкивается с этой проблемой npm (как и я), и ничто другое не помогает - попробуйте этот инструмент на основе git, который я создал недавно: 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 и другие изменения стабилизировались.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.