npm ERR! code FETCH_ERROR npm ERR! errno FETCH_ERROR npm ERR! invalid
json response body at https://r.cnpmjs.org/npm reason: Invalid
response body while trying to fetch https://r.cnpmjs.org/npm: Socket
timeoutnpm ERR! A complete log of this run can be found in:
FETCH_ERROR
和Socket timeout
错误通常是由于网络连接不稳定、超时或 npm 源的响应有问题引起的。以下是一些建议来解决这个问题:
1. 切换 npm 源
如果你目前使用的是 https://r.cnpmjs.org/
,你可以尝试切换到其他更可靠的源。以下是几个常用的 npm 源:
- 官方 npm 源:
npm config set registry https://registry.npmjs.org/
- 淘宝镜像源(更适合国内使用):
npm config set registry https://registry.npmmirror.com/
切换之后,再尝试运行 npm install
看是否能解决问题。
2. 增加超时时间
你可以尝试增加 npm 的超时时间,以避免网络请求因为短暂的延迟导致超时。使用以下命令:
npm config set fetch-retries 5
npm config set fetch-retry-factor 10
npm config set fetch-retry-mintimeout 30000
npm config set fetch-retry-maxtimeout 120000
npm config set timeout 120000
这些设置将增加 npm 的重试次数和超时限度,以应对不稳定的网络。
3. 清除 npm 缓存
有时缓存中的不完整或损坏的包文件可能会导致问题。你可以尝试清除 npm 缓存:
npm cache clean --force
然后再尝试重新安装依赖:
npm install
4. 使用 VPN
如果你在国内并且切换 npm 源后问题仍然存在,确保你的 VPN 正常工作,可以尝试切换到另一个服务器节点。
5. 手动安装依赖
如果某些依赖包总是遇到 FETCH_ERROR
,你可以尝试手动下载相关的 .tgz
包,然后使用以下命令本地安装:
npm install /path/to/package.tgz
6. 检查网络连接
你可以检查网络连接,使用 ping
命令确认能否连接到 registry.npmjs.org
或者 r.cnpmjs.org
,确保没有 DNS 解析问题。你也可以尝试更改 DNS 配置,使用公共 DNS(如 Google 的 8.8.8.8 或 Cloudflare 的 1.1.1.1)。
7. 升级 npm
如果以上方法仍然无法解决问题,尝试升级 npm 到最新版本:
npm install -g npm@latest