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...是npm从tarball文件生成校验和时得到的值。

两种方法可以解决此错误

  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。

相关推荐
涛涛ing20 分钟前
2026年最值得关注的前端变化,藏在“默认值”里
前端
亿元程序员2 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice3 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
用户0829773260053 小时前
RTX 5500 MIG 踩坑记录:切分之后模型跑不起来,排错整整一下午
前端
Lank_M3 小时前
AI 放大后的图更清楚,但它不能当原图入库
前端
Swot3 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
用户4147679304153 小时前
Windows 触摸屏上 Swiper 轮播滑不动?可能是内部滚动容器抢走了你的手势
前端
张明君644513 小时前
从一个 Referer 引发的 403,到 SSR 服务失稳:Astro 流式渲染与缓存失效分析
前端
律宏阔3 小时前
微信小程序 + Taro + TDesign 去掉 [&&&],让普通 Tailwind 类接管局部样式
前端·微信小程序·taro
费曼学习法3 小时前
把 3 个内部服务封装成 MCP Server 的工程复盘:进程模型、超时与错误契约
前端