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