Чому package-lock.json змінив хеш цілісності з sha1 на sha512?


121

Я щойно створив новий npm lockfile, 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.community/t/shasum-check-or-integrity-eintegrity-errors/153
Кайл

Відповіді:


105

З того, що я бачу, npm змінив контрольну суму цілісності з sha1 на sha512.

Якщо ваші зміни в git переходять від sha1 до sha512, ви повинні зробити це оновлення один раз, і це буде добре після цього.

Якщо хтось, хто працює з кодовою базою даних і бачить, як git змінюється від sha512 вниз до sha1 (це проблема, з якою у мене виникли), ви можете виправити це, виконавши наступне:

Відмовтеся від змін у git для пакета-lock.json

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

Це оновить npm та перевстановить усі ваші пакунки, щоб була нова контрольна сума (sha512).


1
Чи є причина використовувати sha512 над sha1? Наразі мій комп'ютер змінюється на sha1 для нашого середовища.
Ілля1210

@ 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 vs sha-1, яка викликала розчарувальні конфлікти злиття.


6

Дивіться також https://github.com/npm/npm/isissue/17749, яка, хоча стверджує, що проблема "виправлена", це не так. Видалення node_modules- це обхідне рішення.

Можливо, є зв’язок з операційними системами. Зараз ми досягаємо цього з розробниками на платформах Linux та Windows.


3
минули місяці, як це було розміщено, і я все ще страждаю від цього. це вбиває мене
Чад Рупперт

2
Ми перейшли до пряжі врешті-решт.

1
Кожна проблема, що стосується НПМ, здавалося б, вирішується переїздом до
Пряжі

2

Як @Daniel Cumings, я також повинен був видалити, package-lock.jsonщоб позбутися шахів хеш. Ось команди 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

Після цього пакета-lock.json використаний sha512 та інші зміни стабілізувалися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.