【问题标题】:Why did package-lock.json change the integrity hash from sha1 to sha512?为什么 package-lock.json 将完整性哈希从 sha1 更改为 sha512?
【发布时间】:2018-05-18 05:09: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


【解决方案1】:

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

【讨论】:

  • 是否有理由使用 sha512 而不是 sha1?我的计算机目前正在为我们的环境更改为 sha1。
  • @Elijah1210 我猜想通过碰撞“伪造”哈希的可能性较小?
  • 这对我来说还不够。除了删除node_modules文件夹,我还需要npm cache clear --force
【解决方案2】:

另请参阅https://github.com/npm/npm/issues/17749,尽管声称该问题已“修复”,但事实并非如此。删除 node_modules 是一种解决方法。

可能与操作系统有关。我们现在正与 Linux 和 Windows 平台上的开发人员一起实现这一目标。

【讨论】:

  • 这篇文章发布已经几个月了,我仍然深受其害。它正在杀死我
  • 我们最终转向了纱线。
  • 迁移到 Yarn 似乎解决了每个 NPM 问题
【解决方案3】:

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

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

【讨论】:

【解决方案4】:

在以前的 cmets 和建议的基础上进一步构建,对我来说,我需要擦除现有的 node_modules 文件夹、缓存,然后从 git(从另一台计算机提交)中获取 sha512 package-lock.json 文件,最后执行一个 npm i。像这样的:

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

在这个 package-lock.json 使用 sha512 和其他变化稳定之后。

【讨论】:

  • 在这种情况下真的需要git reset --hard吗?
【解决方案5】:

作为@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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

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

      要在不修改的情况下检查它,请尝试/usr/local/bin/npm i 而不是npm i

      【讨论】:

        猜你喜欢
        • 2012-02-09
        • 1970-01-01
        • 2018-09-04
        • 2019-09-27
        • 2010-10-11
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        相关资源
        最近更新 更多