Почему package-lock.json изменил хэш целостности с sha1 на sha512?
11 ответов
Из того, что я вижу, 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).
Опираясь на то, что ответил Дейв. Исправление, которое я нашел, заключалось в следующем:
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, которая вызывала неприятные конфликты слияния.
См. Также https://github.com/npm/npm/issues/17749 котором говорится, что проблема "исправлена", но это не так. Удаление node_modules
это обходной путь.
Там могут быть отношения с операционными системами. Мы достигли этого прямо сейчас с разработчиками на платформах Linux и Windows.
Я работаю в большой команде. Принуждение каждого разработчика к принудительной очисткеnpm
кеш сложен и ненадежен. Кроме того, это помогает не каждый раз. Итак, для тех, кто все еще сталкивается с этой проблемой npm (как и я) и ничто другое не помогает - попробуйте этот инструмент на основе git, который я недавно создал: https://github.com/kopach/lockfix. Он возвращаетсяsha512 -> sha1
изменения целостности файлов блокировки npm. Если вы добавите это в свойpostshrinkwrap
сценарий package.json
- в конечном итоге вы должны установить для всех свойств целостности значение sha512
и иметь согласованный файл блокировки.
npm install --save-dev lockfix
"scripts": {
"postshrinkwrap": "lockfix",
},
Как @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
Вы можете решить эту проблему, выполнив следующие изменения:
- Убедитесь, что версия npm: 7.x или выше
- Создать
.npmrc
файл
// .npmrc
lockfile-version=3
- Удалите свой
node_modules
:rm -rf node_modules/
- Удалить существующие
package-lock.json
:rm package-lock.json
- Установите пакеты npm:
npm install
Вы можете проверить интеграционный хэш:
$ grep -o 'sha1' package-lock.json | wc -l
Если вы используете
npm
v5 или более поздней версии, и вы видите, что хэши целостности меняются с sha512 обратно на sha1, один из способов исправить это, не удаляя ваш, — это сделать следующее:
- Удалите все хэши целостности sha1 из вашего ( не удаляйте свой ); Например:
diff --git a/package-lock.json b/package-lock.json index 6374e258..05f77ec8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,12 +56,10 @@ "@babel/core": { "version": "7.9.6", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha1-X+QF1VU04G078GD4anmTXNpfZhU=" }, "@babel/parser": { "version": "7.9.6", "resolved": "https://registry.npmjs.org/npm-adobe-release/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha1-fGzlDyLGPvCJNpHXPZrCdGz7QSY=" },
- Удалите свой
node_modules
:rm -rf node_modules
- Очистите кеш npm:
npm cache clean --force
- Установите пакеты:
npm install
Это должно привести к вашему
package-lock.json
обновлен хэшами целостности sha512.
Скорее всего, это произошло из-за того, что вы изменилиnode
версия, которую вы используете. Более новая версия использования.
В моем случае я работаю в общем проекте, и произошло следующее: я запустил FRESH с более новой версией, из-за чего мой файл был изменен для использования . После этого я обновил свою ветку, т.е.git reset --hard && git pull
, который принес мне файл сSHA1
контрольные суммы. Потому что у меня все еще была мояnode_modules
установлен с более новой версиейnpm
сразу после выполненияgit pull
я побежалnpm i
который изменил мойpackage-lock
файл для использованияhash512
.
Tl;dr:
- Убедитесь, что вы используете правильную версию узла для проекта, лучше использовать
nvm use
-
rm -Rf node_modules && npm i
(вы ДОЛЖНЫ выполнить rm -Rf node_modules, иначе вы будете продолжать получать изменения блокировки пакета)
Это должно поддерживать согласованность вашего проекта.
Работает на узле 14
rm -rf node_modules/
npm cache clean --force
sed -i '' 's/"sha1-.*"/""/g' package-lock.json
npm i
rm -rf node_modules/
— удалите node_modules из проекта, чтобы удалить сохраненные пакеты с целостностью sha1.
npm cache clean --force
- удалить кэшированные модули и целостности
sed -i '' 's/"sha1-.*"/""/g' package-lock.json
- заменить все целостности sha1 пустыми строками
npm i
- для обновления целостности в package-lock.json, node_modules и кеше npm.
Результат:
- «npm i» всегда будет устанавливать пакеты с целостностью sha512.
- Даже если кто-то из разработчиков не выполнит эту инструкцию и закоммитит sha-1 — переустановка (npm i) на вашей машине вернет sha512 обратно.
В моем случае
npm -g i npm
было недостаточно, мне пришлось изменить PATH, чтобы указать новый npm в начале.
Чтобы проверить это без изменений, попробуйте
/usr/local/bin/npm i
вместо
npm i
.
Далее, основываясь на предыдущих комментариях и предложениях, мне нужно было стереть существующую папку node_modules, кеш, а затем извлечь файл sha512 package-lock.json из git (который был зафиксирован с другого компьютера), и, наконец, сделать npm, я, Что-то вроде этого:
npm i -g
npm rm -rf node_modules/
npm cache clear --force
git reset --hard
npm i
После этого package-lock.json использовал sha512 и другие изменения стабилизировались.