跳到主要内容

npm install时报错EINTEGRITY

楔子

偶尔项目开发过程中,忽然各种报错 EINTEGRITY报错

像大多数同学一样,几步常规操作:

1.移除所有依赖
rm -rf node_modules
2.清npm缓存
npm cache clean --force
3.重新安装
npm i

然而这次不灵了~😵‍💫

报错原因

报错原因
  1. 在运行 npm install 命令时,npm 将查找在 package.json 文件中作为依赖项列出的包,以便下载和安装
  2. 当存在 package-lock.json 文件时, npm将比较 package-lock.json 和下载的.tgz文件
  3. 当校验和值不匹配时,就会出现EINTEGRITY报错

如图,sha512-xxx后面的hash值不匹配

EINTEGRITY报错

解决方案

# 👇 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缓存存在哪儿?

缓存数据放在根目录中的 _cacache 文件夹中

clean 命令清除的是 _cacache 文件夹

npm缓存存什么?

~/.npm/_cacache 中存的是一些二进制文件(content-v2),以及对应的索引(index-v5: content-v2 里文件的索引)

npm install 时,有缓存的话,会通过 pacote 把对应的二进制文件解压到相应的 node_modules 下面

npm 本身只提供清除缓存和验证缓存完整性的方法,不提供直接操作缓存的方法,可以通过 cacache 来操作这些缓存数据

我们来看下 index-v5 文件夹里文件的内容,可以看出,里面包含的依赖包的一些HTTP请求等信息:

索引文件

引申:npm cache clean和verify的区别

npm cache clean --force  # 强制清除整个缓存,也就是 清空~/.npm/_cacache
npm cache verify # 验证缓存索引和所有缓存数据的有效性和完整性,清理垃圾数据(不需要的数据)