npm install报错 npm ERR! code EINTEGRITY

538 阅读1分钟

在老项目中,更新package-lock.json可能会引发更多问题。然而,在运行CI时出现报错,通常与某些包的完整性检查(integrity)有关。

问题背景

在运行CI过程中报错,但由于历史原因不能轻易更新package-lock.json

问题排查过程

问题排查过程

  1. 查找错误日志: 在CI日志中全局搜索err,找到相关错误信息。

  1. 常见解决方法: 大多数方法建议删除node_modulespackage-lock.json,然后重新安装依赖。但由于历史原因,更新package-lock.json会引发更多问题,这种方法不可取。

  2. 定位问题包: 通过本地复现(运行npm ci),发现package-lock.json中的event-source-polyfill的完整性检查值(integrity)与实际下载的包中的值不一致。可以在lock文件中搜索日志中提到的integrity值来定位问题包。

  3. 解决问题: 更新event-source-polyfill到最新版本后,确保package-lock.json和实际下载包中的完整性值一致,问题解决。

  4. package-lock.json中

  5. node_modules中实际代码

  6. 这是解决过后的截图,当时情况为两个不一致

可能原因

  1. 包的版本管理问题: 同一个版本的包可能被作者多次提交,导致包的唯一识别码(integrity)不一致。
  2. npm源的问题: 使用公司内部源,可能由于nrm混用导致问题。

结论

最简单、快捷的解决方法是:

  1. 删除node_modules
  2. 更新有问题的包到最新版本,确保其完整性值一致。

这样可以避免更新整个package-lock.json,仅修复特定问题包。