npm 的 HTTP 与 HTTPS 代理设置
配置 npm 的 HTTP 和 HTTPS 代理路径,理解 noproxy 排除规则,并在不关闭 TLS 验证的情况下使用私有 CA。
npm 有独立的 proxy 和 https-proxy 设置。区分的是请求的目标。对于通过隧道承载 HTTPS 的普通 HTTP 代理,两者都可以指向同一个 http:// 端点。
项目级 .npmrc 可以包含:
proxy=http://203.0.113.10:8080
https-proxy=http://203.0.113.10:8080
noproxy=localhost,127.0.0.1,registry.example.internal
将文档示例端点替换为你的代理;进行获准的公共 registry 测试时,HTTP 代理列表可提供 HTTP 候选。最后一行有意让指定的内部 registry 直连,它不是另一个代理地址。
让 npm 发起请求
利用缓存完成的安装不适合测试路由:npm 可能已经有所需的全部内容。registry ping 是更小的检查:
npm ping --registry=https://registry.npmjs.org/
成功完成说明这次 npm 调用到达了该 registry 路径,并不能证明所有 tarball 主机、Git 依赖或独立的包管理器进程都使用同一路径。
定位冲突设置时,先检查实际生效的值,不要马上修改更多文件:
npm config get proxy
npm config get https-proxy
npm config get noproxy
如果 URL 中嵌入了凭据,这些命令可能将其打印出来。请在本地检查输出,不要原样粘贴到问题报告中。
项目 .npmrc 不用于全局安装。如果只有 npm install -g 失败,就检查该次调用的有效配置,不要假定它读取了项目文件。
更换 IP 前先检查排除项
npm 也使用代理环境变量,noproxy 设置可能来自 NO_PROXY。被有效配置排除的目标,即使存在代理值,也可能直连。反过来,从某个 .npmrc 删除一行,并不会清除继承的环境变量。
将证书错误分开处理
获准的流量检查代理可能需要组织 CA,而你的 Node/npm 配置尚未信任它。npm 支持 CA 文件:
cafile=/path/to/approved-ca-bundle.pem
strict-ssl=true
使用该环境实际批准的证书包。设置 strict-ssl=false 会削弱证书验证,不能代替选择正确代理或信任材料。
测试结束后,移除你添加的项目覆盖配置,再检查有效值。这样项目可以继承之前的配置,而不改动同一机器上的其他项目。