node.js进程不读vscode的http.proxy,需通过http_proxy/https_proxy环境变量或launch.json/tasks.json显式注入代理配置,且值必须带http://前缀、支持https connect,并注意证书校验与认证编码。

Node.js 进程本身不读 VSCode 的 http.proxy
VSCode 的 http.proxy 设置只影响它自己的网络请求(比如 Marketplace、GitHub 登录、自动更新),对 Node.js 运行时完全无效。你在 settings.json 里填了 "http.proxy": "http://127.0.0.1:7890",node index.js 依然走直连。
要让 Node.js 发出的 HTTP/HTTPS 请求走代理,必须通过环境变量或代码显式配置:
-
NODE_OPTIONS不生效——Node.js 不解析代理相关 flag - 必须用
HTTP_PROXY和HTTPS_PROXY环境变量(注意大小写,Windows/macOS/Linux 均需全大写) - 值必须带协议前缀:
http://127.0.0.1:7890✅,127.0.0.1:7890❌ - 若代理需要认证,密码含
@或:必须 URL 编码,例如pass%40word
在 VSCode 中安全注入代理环境变量
直接改系统级环境变量或 ~/.bashrc 是错的:VSCode 启动时不会重新加载 shell 配置,SSH 连接下的 non-interactive shell 更不会 source 它。
正确做法是通过 VSCode 的 launch.json 或 tasks.json 注入:
- 调试时(
launch.json):在env字段里加"HTTP_PROXY": "http://127.0.0.1:7890"和"HTTPS_PROXY": "http://127.0.0.1:7890" - 任务运行时(
tasks.json):在options.env下设置,或直接在command前加HTTP_PROXY=... HTTPS_PROXY=... node ... - 别依赖终端面板里的
export——那只是当前终端会话有效,和 Node 进程是否被 VSCode 正确启动无关
Node.js 内部请求仍失败?检查代理是否支持 HTTPS CONNECT
很多本地代理(如 Clash 默认配置、旧版 Fiddler)只监听 HTTP 端口,不开启 HTTPS 中转能力。而 Node.js 的 https.request() 或 axios 默认发的是 HTTPS CONNECT 请求,代理不响应就会卡住或报 ETIMEDOUT。
验证方式:
- 终端执行
curl -x http://127.0.0.1:7890 https://httpbin.org/ip,能返回 IP 才说明 HTTPS 代理通 - Clash 用户需确认配置中
allow-lan: true且mode: rule或global,并启用mixed-port(而非仅http-port) - 代码里临时绕过证书校验(仅开发环境):
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0',但这是权宜之计,不是代理配置问题本身
更稳的替代方案:换镜像源 + 环境变量双保险
如果你只是想解决 npm 包安装慢或 npm install 失败,比配代理更可靠的是直接换 registry:
- 全局设置:
npm config set registry https://registry.npmmirror.com - 或在项目根目录加
.npmrc:registry=https://registry.npmmirror.com - 同时保留
HTTP_PROXY给其他工具链(如 pnpm、yarn、git)用,避免单点失效
真正容易被忽略的是:VSCode 调试器启动的 Node 进程,既不继承系统代理,也不自动读 .npmrc,它只认你明确塞进 env 的那几个变量——漏掉任何一个,请求就落地直连。











