Почему package-lock.json изменил хэш целостности с sha1 на sha512?

Я только что сгенерировал новый файл блокировки npm, 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

Вы можете решить эту проблему, выполнив следующие изменения:

  1. Убедитесь, что версия npm: 7.x или выше
  2. Создать.npmrcфайл
      // .npmrc
lockfile-version=3
  1. Удалите свойnode_modules:rm -rf node_modules/
  2. Удалить существующиеpackage-lock.json:rm package-lock.json
  3. Установите пакеты npm:npm install

Вы можете проверить интеграционный хэш:

      $ grep -o 'sha1' package-lock.json | wc -l

Если вы используете npmv5 или более поздней версии, и вы видите, что хэши целостности меняются с sha512 обратно на sha1, один из способов исправить это, не удаляя ваш, — это сделать следующее:

  1. Удалите все хэши целостности 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="
         },
    
  2. Удалите свой node_modules: rm -rf node_modules
  3. Очистите кеш npm: npm cache clean --force
  4. Установите пакеты: 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:

  1. Убедитесь, что вы используете правильную версию узла для проекта, лучше использоватьnvm use
  2. 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 и другие изменения стабилизировались.

Другие вопросы по тегам