必须同时配置extensions.gallery.serviceurl和cacheurl,同域、结尾不带/,且需修改用户settings.json、product.json并彻底退出进程重启;命令行安装还需设置vscode_extensions_msa_url环境变量。

VSCode插件下载慢,不是网络差,而是默认连的境外服务地址没换——必须改 extensions.gallery.serviceUrl 和 extensions.gallery.cacheUrl,缺一不可,否则配置无效。
为什么 settings.json 配了 serviceUrl 还是卡在“正在加载”?
VSCode 1.83+ 版本起,镜像配置被严格校验:两个 URL 必须同时存在、同域名、结尾不带 /。常见错误包括:
- 只加了
"extensions.gallery.serviceUrl",漏掉"extensions.gallery.cacheUrl" -
serviceUrl写成"https://vscode.cdn.azure.cn/_apis/public/gallery/"(末尾多斜杠),导致拼出/gallery//publishers而 404 - 两个 URL 域名不一致,比如
serviceUrl用vscode.cdn.azure.cn,cacheUrl却写成marketplace.visualstudio.com.cn - 配置误写进工作区
settings.json,而 VSCode 只读用户级设置文件
怎么配才真正生效?
打开用户设置 JSON 文件(路径见下),添加这两行(注意逗号分隔、JSON 格式合法):
{
"extensions.gallery.serviceUrl": "https://vscode.cdn.azure.cn/_apis/public/gallery",
"extensions.gallery.cacheUrl": "https://vscode.cdn.azure.cn/_apis/public/gallery/publishers"
}
对应路径:
- Windows:
%APPDATA%\Code\User\settings.json - macOS:
~/Library/Application Support/Code/User/settings.json - Linux:
~/.config/Code/User/settings.json
保存后必须彻底退出 VSCode 进程:Windows 右键任务栏图标选「退出」;macOS 用 Activity Monitor 杀掉所有 Code 进程;Linux 执行 pkill -f "Code Helper"。
code --install-extension 命令还是超时?
命令行安装不读 settings.json,它依赖环境变量 VSCODE_EXTENSIONS_MSA_URL:
- 临时生效:终端里先执行
VSCODE_EXTENSIONS_MSA_URL=https://vscode.cdn.azure.cn code --install-extension esbenp.prettier-vscode - CI/CD 或远程开发中,需在脚本开头显式导出该变量
- 若仍报
connect ETIMEDOUT或卡在pending,检查是否后台运行 Clash/Surge 等代理工具——它们常启用系统代理但未全局,会干扰 DNS 解析 - 某些插件(如
ms-python.python)会额外拉取语言服务器二进制包,这部分完全绕过 gallery 协议,镜像源对其无效,只能离线下载或配 HTTP 代理
自动更新插件失败?product.json 得动
插件自动更新(比如弹窗提示“有新版本”)不读 settings.json,它硬编码在安装目录下的 product.json 文件里:
- Windows:
C:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\resources\app\product.json</username> - macOS:
/Applications/Visual Studio Code.app/Contents/Resources/app/product.json - Linux:
/usr/share/code/resources/app/product.json(取决于安装方式)
找到 extensionsGallery 字段,把其中的 serviceUrl 和 cacheUrl 全部替换成国内镜像地址,和 settings.json 里保持一致。改完重启 VSCode。
最容易被忽略的是:插件市场卡住 ≠ 下载慢,而是请求根本没发出去;code --install-extension 失败 ≠ 镜像没配,而是环境变量没传进去;自动更新失败 ≠ 配置错了,而是 product.json 没碰过。三个地方,一个都不能少。











