code --install-extension 不走 settings.json 代理,因其为独立进程,仅认 --proxy-server 参数或 http_proxy 环境变量;必须显式传参(如 --proxy-server=http://127.0.0.1:7890)或配置环境变量并 source 生效,否则直连超时。

命令行安装插件失败或极慢,根本不是网络差,而是 code --install-extension 默认不走 VSCode 的 http.proxy 设置,也不读系统环境变量——必须显式传参或改环境变量才生效。
为什么 code --install-extension 不走 settings.json 里的代理
VSCode 桌面版的 http.proxy 只控制 UI 界面内插件市场的请求;而命令行工具 code 是独立进程,启动时不加载用户设置,也不继承 settings.json 中的代理配置。它只认两类东西:环境变量(HTTP_PROXY/HTTPS_PROXY)或启动参数(--proxy-server)。
- 直接运行
code --install-extension esbenp.prettier-vscode→ 请求直连境外 CDN,国内大概率卡住或超时 - 即使你已在 VSCode 设置里填了
http.proxy,这条命令也完全无视 - Windows PowerShell 或 macOS Terminal 启动的
code,也不会自动读取 GUI 版本的配置上下文
code --proxy-server 参数必须带协议且不能用 localhost
这是最直接、无需重启、临时生效的方式,但格式极其敏感:
- ✅ 正确写法:
code --proxy-server=http://127.0.0.1:7890 --install-extension esbenp.prettier-vscode - ❌ 错误写法:
code --proxy-server=127.0.0.1:7890(缺http://前缀,VSCode 静默忽略) - ❌ 错误写法:
code --proxy-server=http://localhost:7890(部分版本解析失败,且 Windows/macOS 默认 bypasslocalhost) - ⚠️ 注意:
--proxy-server只对本次命令生效,关掉终端就失效;也不能和--proxy-settings=off混用
环境变量方式更稳定,但要确保被正确加载
在终端中设 HTTP_PROXY 和 HTTPS_PROXY 是长期有效的方法,但容易因 shell 配置未生效而失败:
- 先确认当前 shell 是否加载了变量:运行
echo $HTTP_PROXY,应输出类似http://127.0.0.1:7890 - 如果为空,编辑
~/.zshrc(macOS)或~/.bashrc(Linux)或%USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1(Windows PowerShell),追加:
"export HTTP_PROXY=http://127.0.0.1:7890 export HTTPS_PROXY=http://127.0.0.1:7890"
- 然后运行
source ~/.zshrc(或对应文件)使变量立即生效 - 再执行
code --install-extension,此时会自动走代理 - ⚠️ 注意:GUI 方式启动的 VSCode(如双击图标)不会继承终端环境变量;必须从已 source 过的终端里运行
code .才能保证一致
镜像源环境变量比代理更可靠,尤其适合 CI/CD
当代理不稳定、或你在远程服务器/CI 流水线里跑 code --install-extension,推荐优先用镜像源环境变量,它绕过所有代理链路:
- 微软官方镜像地址:
https://vscode.cdn.azure.cn(由 Azure 官方运营,SHA256 校验与源站一致) - 命令示例:
VSCODE_EXTENSIONS_MSA_URL=https://vscode.cdn.azure.cn code --install-extension ms-python.python - 该变量仅影响插件元数据和 VSIX 下载,不影响语言服务器等额外资源(那些仍需代理或手动下载)
- 若仍失败,检查是否漏了
VSCODE_EXTENSIONS_MSA_URL拼写——少一个字母或大小写错误都会静默回退到默认源
真正卡住的地方往往不是“有没有配”,而是 127.0.0.1 被系统 bypass、http:// 前缀被省略、或者环境变量压根没进 code 进程。验证永远比猜测快:用 curl -x http://127.0.0.1:7890 https://httpbin.org/ip 先确认代理通不通,再动 VSCode。











