为什么 package-lock.json 将完整性哈希从 sha1 更改为 sha512?

问题描述 投票:0回答:11

我刚刚生成了一个新的 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==",
    […]
}
npm npm-install package-lock.json
11个回答
147
投票

据我所知,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)。


53
投票

以戴夫的回答为基础。我发现的修复方法是执行以下操作:

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 问题,该问题导致令人沮丧的合并冲突。


9
投票

另请参阅https://github.com/npm/npm/issues/17749,虽然声称问题已“修复”,但事实并非如此。删除

node_modules
是一种解决方法。

可能和操作系统有关系。我们现在正在与 Linux 和 Windows 平台上的开发人员一起解决这个问题。


7
投票

我在一个大团队中工作。强迫每个开发人员强制清理

npm
缓存是困难且不可靠的。而且,这并不是每次都有帮助。因此,对于仍然面临这个 npm 问题(和我一样)并且没有其他帮助的人 - 尝试我最近构建的这个基于 git 的工具:https://github.com/kopach/lockfix。它恢复 npm 锁定文件的
sha512 -> sha1
完整性更改。如果您将其添加到
postshrinkwrap
package.json
脚本中 - 您最终应该将所有完整性属性设置为
sha512
并使锁定文件保持一致。

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

6
投票

作为@Daniel Cumings,我还必须删除

package-lock.json
以摆脱 sha1 哈希值。以下是 Windows CLI 命令供参考,其作用与 Daniel 的脚本相同:

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

2
投票

如果您使用的是

npm
v5 或更高版本,并且您看到完整性哈希值从 sha512 更改回 sha1,则在不删除 package-lock.json 的情况下解决该问题的一种方法是执行以下操作:

从您的
    package-lock.json
  1. 中删除所有 sha1 完整性哈希(
    不要删除您的 
    package-lock.json
    );例如:
    
    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
  3. rm -rf node_modules
    清除npm缓存:
  4. npm cache clean --force
  5. 安装软件包:
  6. npm install
  7. 
    
  8. 这应该会导致您的
package-lock.json

更新为 sha512 完整性哈希值。

    


2
投票

确保npm版本:7.x或以上
  1. 创建
  2. .npmrc
  3. 文件
    
    
  4. // .npmrc lockfile-version=3
删除您的
    node_modules
  1. rm -rf node_modules/
    删除现有的
  2. package-lock.json
  3. rm package-lock.json
    安装 npm 包:
  4. npm install
  5. 
    
  6. 您可以检查集成哈希:

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



1
投票
node

版本而发生的。 较新版本的

npm
使用
hash512
就我而言,我在一个共享项目中工作,发生的情况是我使用较新版本的 

npm i

运行了 FRESH

npm
,这导致我的
package-lock
文件更改为使用
hash512
。之后,我刷新了我的分支,即
git reset --hard && git pull
,它给我带来了一个带有
package-lock
校验和的
SHA1
文件。 因为在完成
node_modules
之后,我仍然安装了较新版本的
npm
,所以我运行了
git pull
,将我的
npm i
文件更改为使用
package-lock
 tl;dr 是:

确保您为项目使用正确的节点版本,更喜欢使用

hash512

  1. nvm use
    (您必须执行 rm -Rf node_modules,否则您将不断收到包锁定更改)
  2. 这应该使您的项目保持一致

rm -Rf node_modules && npm i


0
投票
rm -rf node_modules/ npm cache clean --force sed -i '' 's/"sha1-.*"/""/g' package-lock.json npm i
 - 从项目中删除node_modules以删除具有sha1完整性的持久包

rm -rf node_modules/
- 删除缓存的模块和完整性

npm cache clean --force
- 用空字符串替换所有 sha1 完整性

sed -i '' 's/"sha1-.*"/""/g' package-lock.json
- 更新 package-lock.json、node_modules 和 npm 缓存中的完整性。

结果:


“npm i”将始终安装具有 sha512 完整性的软件包。

即使其中一位开发人员不遵循此说明并提交 sha-1 - 在您的计算机上重新安装(npm i)也会返回 sha512。
  • 就我而言,
npm i

-2
投票

要在不修改的情况下检查它,请尝试使用

npm -g i npm
而不是

/usr/local/bin/npm i

    
进一步基于之前的评论和建议,对我来说,我需要擦除现有的node_modules文件夹、缓存,然后从git获取sha512 package-lock.json文件(这是从另一台计算机提交的),最后执行npm我。像这样的东西:


-4
投票

此 package-lock.json 使用 sha512 且其他更改稳定后。

© www.soinside.com 2019 - 2024. All rights reserved.