根本原因是webstorm terminal默认使用powershell,不继承cmd中设置的http_proxy环境变量,导致gemini cli无法读取代理配置而直连失败;正确做法是将terminal shell改为cmd.exe,并在gemini.cmd脚本中自动注入大小写兼容的四行代理变量。

WebStorm Terminal 代理不生效,gemini CLI 报 fetch failed
根本原因是 WebStorm Terminal 默认使用 PowerShell,它不继承你在 CMD 里 set 的 http_proxy 环境变量。所以 gemini CLI 根本读不到代理设置,直接走本地直连,而你的网络环境又不允许直连 Google API,于是报 Error: exception TypeError: fetch failed。
- 不要在 Terminal 里手动
set HTTP_PROXY=...—— 每次新开 Terminal 都得重输,且只对当前会话有效 - 也不推荐设系统级环境变量(
HTTP_PROXY/HTTPS_PROXY)—— 会影响所有程序,比如通义灵码也会被强制走代理 - 真正有效的做法是:把 Terminal 的 Shell 切成
cmd.exe,再配合gemini.cmd脚本自动注入代理变量
如何让 gemini CLI 在 WebStorm 中稳定走代理
关键不是改 IDE 设置,而是绕过 PowerShell 的隔离机制,让 Node.js 进程启动时就带好代理变量。
- 修改 WebStorm Terminal 配置文件:
C:\Users\用户名\AppData\Roaming\JetBrains\WebStorm2025.2\options\terminal.xml,添加一行:<option name="shellPath">cmd.exe</option> - 在 Node.js 安装目录下(注意:是 nvm 当前激活版本的路径,比如
C:\Users\用户名\AppData\Roaming\nvm\v22.22.2\)新建gemini.cmd -
gemini.cmd内容必须包含四行代理变量赋值(大小写都要覆盖):SET HTTP_PROXY=...、SET HTTPS_PROXY=...、SET http_proxy=...、SET https_proxy=... - 如果同时用 PowerShell 启动其他工具(如
gemini.ps1),也要在脚本开头加等效的$env:HTTP_PROXY=...赋值
为什么浏览器能联网,但 WebStorm 里的工具连不上
浏览器走的是系统代理设置(Windows 设置 → 网络和 Internet → 代理),而 WebStorm Terminal 和 CLI 工具默认不读这个设置,只认环境变量。这是两个完全独立的代理通道。
- 即使你开了「全局代理」,也只影响走 WinINet 或系统 API 的程序(如 Edge、Chrome),不影响基于 Node.js 的 CLI
- 某些插件(如 JetBrains AI Assistant)内部用的是 Electron 网络栈,它可能读系统代理,也可能读环境变量 —— 行为不统一
- 验证方式很简单:在 WebStorm Terminal 里运行
echo %HTTP_PROXY%(cmd)或$env:HTTP_PROXY(PowerShell),为空就说明没生效
代理端口连得上,但请求仍失败?检查 DNS 和协议匹配
连通 telnet 127.0.0.1 7890 成功 ≠ 请求能转发成功。很多失败卡在 DNS 或协议层。
- 用
curl -v --proxy http://127.0.0.1:7890 https://httpbin.org/ip测试完整链路;如果返回 502 或超时,大概率是代理工具没开启「DNS over proxy」或不支持 HTTPS CONNECT - 确认你的代理工具(如 Clash、Clash for Windows)已启用「System Proxy」+「Enhanced Mode」(即 TUN 模式或 Fake IP),否则 DNS 请求仍走本地
- 部分代理服务(尤其是企业自建 Squid)只支持 HTTP 代理,不支持 HTTPS 隧道,此时
https://请求会失败,需改用 SOCKS5 或换节点











