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

时间:2017-12-04 17:03:10

标签: npm npm-install package-lock.json

我刚刚生成了一个新的npm lockfile,package-lock.json,作为我典型工作流程的一部分。但是我注意到这次所有的完整性哈希都从sha1改为sha512。这里发生了什么?

enter image description here

6 个答案:

答案 0 :(得分:64)

从我所看到的,npm将完整性校验和从sha1更改为sha512。

如果您的git更改从sha1更改为sha512,那么您应该进行一次更新,之后会更好。

如果其他人使用代码库并看到从sha512到sha1的git更改(这是我遇到的问题),您可以通过运行以下命令来修复它:

放弃针对package-lock.json的git中的更改

return http.post('/auth/silentCall', {user: 123}).subscribe(

这将更新npm并重新安装所有软件包,以便存在新的校验和(sha512)。

答案 1 :(得分:22)

以Dave的回答为基础。我发现的解决方法是执行以下操作:

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问题。

答案 2 :(得分:6)

另请参阅https://github.com/npm/npm/issues/17749虽然声称该问题已得到修复,但它并非如此。删除node_modules是一种解决方法。

可能与操作系统有关系。我们现在正在与Linux和Windows平台上的开发人员合作。

答案 3 :(得分:2)

我正在大团队中工作。强制每个开发人员强制执行干净的npm缓存是困难且不可靠的。同样,这并不能每次都有用。因此,对于仍然面临这个npm问题(与我一样)并且没有其他帮助的任何人-尝试使用我最近构建的基于git的工具:https://github.com/kopach/lockfix。它恢复npm的锁定文件的sha512 -> sha1完整性更改。如果将其添加到postshrinkwrap的{​​{1}}脚本中-最终应将所有完整性属性设置为package.json并具有一致的锁定文件。

sha512
npm install --save-dev lockfix

答案 4 :(得分:0)

根据以前的评论和建议,对我来说,我需要先擦除现有的node_modules文件夹,缓存,然后从git(由另一台计算机提交)中获取sha512 package-lock.json文件,最后执行npm我像这样:

npm i -g
npm rm -rf node_modules/
npm cache clear --force
git reset --hard
npm i

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

答案 5 :(得分:0)

在我的情况下,npm -g i npm还不够,我不得不修改PATH以在开始时指向新的npm。

要对其进行未经修改的检查,请尝试使用/usr/local/bin/npm i而不是npm i