CICD编译时遇到npm error code EINTEGRITY的问题

场景

CICD编译时抛出npm error code EINTEGRITY的错误

bash 复制代码
npm error code EINTEGRITY
npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== but got sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==. (318961 bytes)
npm error A complete log of this run can be found in: /root/.npm/_logs/2025-05-21T01_30_13_824Z-debug-0.log

解决

bash 复制代码
# 删除 node_modules and package-lock.json
rm -rf node_modules package-lock.json

# 清理和验证 npm cache
npm cache clean --force
npm cache verify

# 重新安装
npm install

分析

在运行到npm install命令时,会看到进程失败并显示EINTEGRITY错误代码。

错误示例输出如下:

bash 复制代码
npm ERR! code EINTEGRITY
npm ERR! sha512-vjA...Azq==
integrity checksum failed when using sha512:

wanted sha512-vjA...Azq==

but got sha512-MjAA...LNsqvg==. (161379 bytes)

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/nsebhastian/.npm/_logs/2022-06-16T10_04_42_791Z-debug.log

这是因为运行npm install命令时,npm将查找package.json文件中列为依赖项的包,进行下载和安装。

当package-lock.json当目录中有文件时,npm会将下载的tarball.tgz文件的校验和与在package-lock.json文件中找到的校验和进行对比。

当文件和package-lock.json文件EINTEGRITY之间的校验和值不匹配时,就会发生如上所示的错误。

这段错误消息大概意思是:npm说想要sha512......但得到的是sha512......

wanted...中的值是在package-lock.json文件中找到的值。

got...npmtarball文件生成校验和时得到的值。

两种方法可以解决此错误

  1. 删除package-lock.json文件,并在安装完成后让npm生成一个新文件。

  2. 更新package-lock.jso文件中列出的完整性值。搜索并替换文件中错误消息中的值,将想要的值sha512-vjA... 替换为sha512-MjAA...(最终选取该方法)

当然,如果文件中有很多EINTEGRITY错误时,这会很烦人。这种情况下直接删除package-lock.json文件会更容易,因为npm无论如何都会生成一个新文件。

如果上述方法不起作用,可按照以下步骤清除节点模块和npm缓存文件夹:

bash 复制代码
# remove node_modules and package-lock.json
rm -rf node_modules package-lock.json

# Clear and verify npm cache
npm cache clean --force
npm cache verify

# now run npm install again
npm install

校验和值

校验和值是从特定文件生成的字母数字哈希值,当文件内容改变时,校验和值也会改变。

npm包中,校验和用于验证下载的文件的完整性。

第一次将包安装为依赖项时,npm将生成每个包的校验和并将其存储在文件中package-lock.json

下面是一个例子:

bash 复制代码
{
  "@babel/code-frame": {
    "version": "7.16.7",
    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
    "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
    "requires": {
      "@babel/highlight": "^7.16.7"
    }
  }
}

integrity上面依赖关系图中的属性是通过对code-frame-7.16.7.tgz文件运行哈希sha512函数生成的。

npm install以后运行时,npm会再次对该code-frame-7.16.7.tgz文件运行哈希函数,看校验和是否与属性中的一致integrity

当值不同时,npm将抛出EINTEGRITY错误代码。

这就是删除package-lock.json文件有效的原因。因为这导致npm将直接跳过包的校验和比较过程(直到下次npm install再次运行)

npm版本5之前,校验和是用sha1而不是生成的sha512

另外注意,有时npm也会EINTEGRITY因为不同的sha哈希值而产生警告,如下所示:

bash 复制代码
npm WARN registry Unexpected warning for https://registry.npmjs.org/: 

Miscellaneous Warning EINTEGRITY: sha1-UWbihk...TIIM= 
integrity checksum failed when using sha1: 
wanted sha1-UWbihk...TIIM= 

but got sha512-yJHVQEh...pWft6kWBBcqh0UA==. (11423 bytes)

这意味着package-lock.json文件中有sha1值,但npm生成sha512值。

这种情况下,需要删除node_modules文件夹和package-lock.json文件才能解决警告。

如果使用的是旧版本的npm,请在再次尝试安装之前升级npm版本:

bash 复制代码
# upgrade npm version
npm install -g npm@latest

# remove node_modules and package-lock.json
rm -rf node_modules package-lock.json

# Clear and verify npm cache
npm cache clean --force
npm cache verify

# now run npm install again
npm install

依次运行上述命令以解决错误EINTEGRITY

相关推荐
JSLove8 分钟前
nginx入门
前端·nginx
时光足迹9 分钟前
ThreeJS之GUI控制器
前端·javascript·three.js
时光足迹10 分钟前
Tiptap编辑器
前端·javascript·react.js
时光足迹13 分钟前
电子书阅读器之笔记高亮(跨段处理)
前端·javascript·react.js
Dabei16 分钟前
Android 副屏(Virtual Display)创建与悬浮窗画中画显示实战
前端·架构
Hello-Mr.Wang35 分钟前
【保姆级教程】MasterGo MCP + Cursor 一键实现 UI 设计稿还原
前端·javascript·vue.js·ai编程
Dabei38 分钟前
Android 无障碍服务实现美团/微信自动化:客户端开发实践
前端·设计模式
华超磊1 小时前
关于手动实现滚动的尝试
前端
宁雨桥1 小时前
前端修行日记之JS 原型与 AI基础常识
前端·javascript·原型模式