npm install时报错EINTEGRITY
楔子
偶尔项目开发过程中,忽然各种报错

像大多数同学一样,几步常规操作:
1.移除所有依赖
rm -rf node_modules
2.清npm缓存
npm cache clean --force
3.重新安装
npm i
然而这次不灵了~😵💫
报错原因
报错原因
- 在运行
npm install命令时,npm将查找在package.json文件中作为依赖项列出的包,以便下载和安装 - 当存在
package-lock.json文件时,npm将比较package-lock.json和下载的.tgz文件 - 当校验和值不匹配时,就会出现
EINTEGRITY报错
如图,sha512-xxx后面的hash值不匹配

解决方案
# 👇 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 # 验证缓存索引和所有缓存数据的有效性和完整性,清理垃圾数据(不需要的数据)