Arch Linux下npm/yarn操作出现ETIMEDOUT错误求助
解决npm/yarn ETIMEDOUT问题的进阶方案
1. 强制npm仅使用IPv4(持久化配置)
之前禁用IPv6仅成功一次,大概率是临时配置未持久化,或者系统自动恢复了IPv6。直接给npm全局锁定IPv4:
- 执行以下命令配置:
npm config set ipv4 true --global npm config set registry http://registry.npmjs.org/ --global npm config set fetch-retry-mintimeout 2000 --global npm config set fetch-retry-maxtimeout 10000 --global - 验证配置是否生效:
输出应为npm config get ipv4true
2. 系统层面永久禁用IPv6(Arch Linux专属)
临时禁用IPv6重启后会失效,直接在系统层面锁死:
- 立即生效的临时禁用:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 - 持久化配置(重启后仍生效):
编辑/etc/sysctl.d/99-sysctl.conf,添加两行:
然后刷新配置:net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1sudo sysctl --system
3. 修复DNS解析问题
缓存清理可能打乱了DNS配置,导致npm无法解析registry地址:
- 更换为公共DNS(以systemd-resolved为例):
编辑/etc/systemd/resolved.conf,修改如下内容:
重启DNS服务:DNS=8.8.8.8 8.8.4.4 FallbackDNS=1.1.1.1 1.0.0.1sudo systemctl restart systemd-resolved - 验证解析是否正常:
确保能返回IPv4地址且ping通nslookup registry.npmjs.org ping -4 registry.npmjs.org
4. 检查防火墙/网络规则
清理缓存后防火墙规则可能重置,阻止了npm的出站请求:
- 查看当前防火墙状态(以ufw为例):
确保允许80、443端口的出站请求sudo ufw status - 临时关闭防火墙测试:
如果此时npm ping成功,说明是防火墙规则问题,重新配置允许npm相关的网络请求即可sudo ufw disable
5. 完全重置npm配置
之前的配置修改可能存在冲突,一键重置到默认状态:
npm config delete proxy npm config delete https-proxy npm config delete registry npm config set registry https://registry.npmjs.org/ npm cache clean --force
重置后再执行npm ping测试
6. 单独重置yarn配置
如果yarn也出现相同问题,单独处理yarn:
yarn config delete proxy yarn config delete https-proxy yarn config set registry https://registry.npmjs.org/ yarn cache clean
内容的提问来源于stack exchange,提问作者Raihanur Rahman
相关产品推荐
相关产品推荐

