在老项目中,更新
package-lock.json可能会引发更多问题。然而,在运行CI时出现报错,通常与某些包的完整性检查(integrity)有关。
问题背景
在运行CI过程中报错,但由于历史原因不能轻易更新package-lock.json。
问题排查过程
问题排查过程
- 查找错误日志: 在CI日志中全局搜索
err,找到相关错误信息。
-
常见解决方法: 大多数方法建议删除
node_modules和package-lock.json,然后重新安装依赖。但由于历史原因,更新package-lock.json会引发更多问题,这种方法不可取。 -
定位问题包: 通过本地复现(运行
npm ci),发现package-lock.json中的event-source-polyfill的完整性检查值(integrity)与实际下载的包中的值不一致。可以在lock文件中搜索日志中提到的integrity值来定位问题包。 -
解决问题: 更新
event-source-polyfill到最新版本后,确保package-lock.json和实际下载包中的完整性值一致,问题解决。 -
package-lock.json中
-
node_modules中实际代码
-
这是解决过后的截图,当时情况为两个不一致
可能原因
- 包的版本管理问题: 同一个版本的包可能被作者多次提交,导致包的唯一识别码(integrity)不一致。
- npm源的问题: 使用公司内部源,可能由于
nrm混用导致问题。
结论
最简单、快捷的解决方法是:
- 删除
node_modules。 - 更新有问题的包到最新版本,确保其完整性值一致。
这样可以避免更新整个package-lock.json,仅修复特定问题包。