Node依赖安装卡在“fetching”或超时,90%是DNS解析失败或缓慢所致,需先用nslookup/ping验证registry.npmjs.org等域名解析,再通过修改hosts文件(如添加2606:4700::6812:7b5a registry.npmjs.org)并重启VSCode,同步配置npm/pnpm镜像源为https://registry.npmmirror.com。

Node依赖安装卡在“fetching”或超时,先确认是不是DNS问题
VSCode里用npm/pnpm install卡住,90%不是网络不通,而是域名解析失败或缓慢——比如registry.npmjs.org、github.com这类域名迟迟不返回IP,npm install就一直停在“fetching metadata”或“resolve”阶段,连TCP连接都发不出去。
验证方法很简单:打开VSCode内置终端(Ctrl+`),直接运行:
nslookup registry.npmjs.org ping -c 3 registry.npmjs.org
如果nslookup卡住几秒才出结果,或者ping显示“Unknown host”,基本就是DNS层拖慢了整个流程。
- 别信“能上网页就说明DNS正常”——浏览器走的是系统DNS缓存+DoH,而Node CLI默认绕过这些,直连系统配置的DNS服务器
- Windows上
ipconfig /all看DNS服务器地址;macOS/Linux查scutil --dns或cat /etc/resolv.conf - 常见坑:路由器自带DNS转发不可靠,尤其对
registry.npmjs.org这种带通配符CNAME的域名支持差
临时改hosts是最稳的绕过方案
不折腾DNS服务器,直接把高频域名映射到已知可用IP,立竿见影。重点加这三行(2026年实测有效):
# Windows: C:\Windows\System32\drivers\etc\hosts # macOS/Linux: /etc/hosts 140.82.113.4 github.com 2606:4700::6812:7b5a registry.npmjs.org 114.114.114.114 npmjs.com
改完必须重启终端(不是关窗口,是彻底退出VSCode再重开),否则Node进程仍缓存旧解析结果。
-
registry.npmjs.org的IPv6地址比IPv4更稳定,国内多数ISP对IPv6无QoS限速 - 别用
8.8.8.8或1.1.1.1——部分校园网/企业网会拦截或降速这些公共DNS - 如果
nslookup registry.npmjs.org返回多个A记录,挑延迟最低的那个填进hosts(用ping -c 3 xxx测)
npm/pnpm本身也要配镜像源,否则DNS快了也白搭
DNS只是第一步,真正下载包时还可能被registry.npmjs.org限速或拦截。必须同步换源:
npm config set registry https://registry.npmmirror.com pnpm config set registry https://registry.npmmirror.com
注意:pnpm和npm的配置互不影响,两个都要设;如果项目用了.npmrc,优先级高于全局配置,记得检查项目根目录下有没有它。
- 淘宝镜像(
npmmirror.com)2026年仍保持同步,新包延迟通常 - 避免混用源:比如
npm走镜像,但pnpm没改,装依赖时会交叉失败 - 某些插件(如Dify相关)依赖
github.com上的私有repo,仅换registry不够,必须配合hosts生效
VSCode终端PATH错乱会导致DNS解析失效
VSCode内置终端有时拿不到你shell里设置的PATH或http_proxy,导致Node调用的getaddrinfo函数用的是系统默认DNS,而非你手动配置的代理或hosts。
查当前终端用的Node路径:
which node
node -p "require('os').networkInterfaces()"如果which node指向/usr/bin/node(系统自带旧版),或networkInterfaces()输出里没看到你配的DNS服务器,说明VSCode没继承你的shell环境。
- macOS/Linux:在VSCode设置里搜
terminal.integrated.env,加"terminal.integrated.env.linux": {"PATH": "/opt/homebrew/bin:/usr/local/bin:${env:PATH}"} - Windows:确保启动VSCode前已在PowerShell里执行
$env:PATH = "C:\Program Files\nodejs\" + ";" + $env:PATH - 终极验证:在VSCode终端里跑
curl -v https://registry.npmmirror.com,看是否走你预期的DNS和代理
真实场景里,DNS慢和镜像源没配往往是叠加发生的。单独修一个,另一头还在拖后腿。最常被忽略的是VSCode终端环境隔离问题——你以为改了全局npm源,其实终端根本没读到。


















