代理网络下npx expo-cli init报getaddrinfo ENOTFOUND错误求助
问题根因
你仅配置了npm客户端自身的代理规则,npx临时执行expo-cli时,CLI内部发起的模板下载请求、域名解析请求不会自动继承npm的代理配置。当前代理环境下本地DNS无法解析registry.npmjs.org域名,直接触发getaddrinfo ENOTFOUND错误。
你提到的npm start可正常运行、非代理网络下init成功属于符合预期的现象:npm start仅调用本地已安装的依赖,不需要发起外网资源拉取请求;非代理网络下本地DNS可正常解析registry域名,不会触发解析失败。
解决方案
按以下顺序配置即可解决问题:
- 配置当前终端会话的全局代理环境变量,让终端内所有node进程统一走代理,替换命令里的占位符为实际代理地址、端口即可:
配置完成后可通过# Mac/Linux 终端执行 export HTTP_PROXY=http://(myProxyAddress):(myPort) export HTTPS_PROXY=http://(myProxyAddress):(myPort) export NO_PROXY=localhost,127.0.0.1 # Windows CMD 执行 set HTTP_PROXY=http://(myProxyAddress):(myPort) set HTTPS_PROXY=http://(myProxyAddress):(myPort) set NO_PROXY=localhost,127.0.0.1echo $HTTPS_PROXY(Mac/Linux)或echo %HTTPS_PROXY%(Windows CMD)确认变量已生效。 - 显式指定npm源地址执行init命令,避免CLI默认走HTTPS源触发证书/解析问题:
npx expo-cli init 你的项目名称 --registry http://registry.npmjs.org/ - 如果仍报DNS解析错误,说明你的代理需要由服务端完成域名解析,本地解析会失败,添加node启动参数强制优先走IPv4解析、禁用本地DNS预查询即可:
# Mac/Linux 直接执行 NODE_OPTIONS="--dns-result-order=ipv4first" npx expo-cli init 你的项目名称 --registry http://registry.npmjs.org/ # Windows CMD 先执行参数配置,再执行init命令 set NODE_OPTIONS=--dns-result-order=ipv4first npx expo-cli init 你的项目名称 --registry http://registry.npmjs.org/ - 额外排查项:如果你的代理需要身份认证,代理地址要写成
http://用户名:密码@代理地址:端口格式,补全认证信息即可。
配置完成后可以先在当前终端执行curl https://registry.npmjs.org/expo-template-blank验证,能正常返回JSON内容就说明代理配置生效,再执行init命令不会报错。
内容的提问来源于stack exchange,提问作者Rickyslash
相关产品推荐
相关产品推荐

