如何解决 Nx 工作区创建时因网络代理导致的 npm ENOTFOUND 错误

本文详解在企业内网环境下执行 npx create-nx-workspace 失败(报错 enotfound、getaddrinfo 失败)的根本原因及完整解决方案,涵盖代理配置核查、https 仓库地址修正、代理清除与验证步骤。

在使用 npx create-nx-workspace ng-mfe 初始化微前端工作区时,若遇到如下典型错误:

npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! network request to http://registry.npmjs.org/create-nx-workspace failed, reason: getaddrinfo ENOTFOUND iaccess.ril.com

并非 Nx 或命令本身的问题,而是 npm 在尝试访问公共 registry(https://registry.npmjs.org/)时,因网络策略受限而解析失败——常见于企业内网环境,其中 DNS 被重定向至内部代理域名(如 iaccess.ril.com),但该域名无法正确解析或未配置为合法代理入口。

? 根本原因分析

错误中的 getaddrinfo ENOTFOUND iaccess.ril.com 明确表明:npm 当前配置了某个代理(极可能由公司 IT 策略自动注入),但该代理地址不可达或未启用 HTTPS 支持;同时,registry 地址仍被设为不安全的 http:// 协议(NPM 官方自 2025 年起已强制要求 HTTPS),进一步加剧连接失败。

✅ 正确解决方案(分步执行)

1. 清除无效代理配置(推荐首选)

运行以下命令彻底移除可能残留的代理设置(包括 HTTP 和 HTTPS 代理):

npm config delete proxy
npm config delete https-proxy
npm config delete registry
? 提示:即使你未主动设置过代理,某些企业域策略或安装工具(如 Node.js MSI 安装器)会静默写入代理,务必清除。

2. 显式设置安全 registry 地址

确保 registry 使用标准 HTTPS 地址:

npm config set registry https://registry.npmjs.org/

⚠️ 注意:必须是 https://(不是 http://),否则新版 npm 会拒绝请求。

3. 验证配置是否生效

执行以下命令检查当前有效配置:

npm config list

重点关注输出中:

  • registry = "https://registry.npmjs.org/"
  • proxy = undefined
  • https-proxy = undefined

若仍有代理值,请重复第 1 步并重启终端(CMD/PowerShell/VS Code 终端需全新打开)。

4. 尝试重新创建工作区

清除缓存后重试(可选,增强可靠性):

npm cache clean --force
npx create-nx-workspace@latest ng-mfe

✅ 成功标志:控制台开始下载 create-nx-workspace 包,并进入交互式初始化流程(选择包管理器、Nx 版本等)。

? 常见误区提醒

  • ❌ 不要手动配置指向 http://registry.npmjs.org/ —— 强制降级 HTTP 将被 npm 拒绝;
  • ❌ 不要在未确认代理可用性前盲目设置 proxy 或 https-proxy(尤其当 iaccess.ril.com 是内部网关而非公开代理时);
  • ❌ 避免仅修改 .npmrc 文件却未刷新终端环境变量,npm config 命令才是权威配置方式。

? 补充:如确需通过公司代理访问外网

请联系 IT 部门获取支持 HTTPS 的代理地址及认证方式,再按规范配置:

npm config set proxy https://user:pass@your-corp-proxy:8080
npm config set https-proxy https://user:pass@your-corp-proxy:8080
npm config set registry https://registry.npmjs.org/

(注意:密码含特殊字符需 URL 编码;建议优先使用 NTLM 或 PAC 配置,而非明文凭据)

完成上述步骤后,npx create-nx-workspace 即可稳定拉取最新 Nx CLI 并成功初始化微前端工作区。