直接改 extensions.gallery.serviceurl 会失败,因 vscode 1.80+ 强制走内置网络栈绕过代理,且需服务返回符合 gallery api 协议的 json;必须配 serviceurl 和 recommendationsurl,并确保私有服务监听 0.0.0.0、路径为 /api/gallery。

为什么直接改 extensions.gallery.serviceUrl 会失败
VS Code 1.80+ 版本强制使用内置网络栈请求 Marketplace,绕过系统代理,且部分请求带签名 header。你配了 http://localhost:8080 却发现插件列表空白、安装卡在“正在获取扩展”、控制台报 getGalleryServiceUrl failed 或 network error ——大概率是服务没响应或协议不兼容。
关键点有三个:
- 服务必须返回符合 VS Code Gallery API 协议的 JSON 结构(不是随便一个 HTTP 服务就能顶替)
-
--host 0.0.0.0必须显式指定,否则默认绑定127.0.0.1,内网其他机器无法访问 - VS Code 客户端不 fallback,端口不通或路径错(比如少写
/api/gallery)就直接放弃,不会提示具体原因
用 vscode-extension-marketplace-server 搭最小私有源
这是目前社区最轻量、协议兼容性最好的方案:纯静态文件 + 内存索引,无需数据库,启动快,适合内网快速验证。
操作步骤:
- 在一台有 Node.js 16+ 的内网服务器上执行:
npm install -g vscode-extension-marketplace-server - 把所有已下载好的
.vsix文件(如ms-python.python-2024.12.0.vsix)统一放进一个目录,例如D:\vscode-exts\(支持子目录嵌套) - 启动命令加全参数:
vscode-extension-marketplace-server --extensions-dir D:\vscode-exts --port 8080 --host 0.0.0.0 - 浏览器访问
http://your-server-ip:8080/api/gallery,应返回带categories和extensions字段的 JSON,才算真正就绪
客户端配置必须写对这两项
VS Code 不提供图形界面切换市场源,必须手动编辑用户级 settings.json。Windows 路径是:%USERPROFILE%\AppData\Roaming\Code\User\settings.json。
只写 extensions.gallery.serviceUrl 不够,VS Code 会继续尝试从官方地址拉推荐列表,导致“已安装插件不显示更新”或“推荐栏空白”。必须同时配:
"extensions.gallery.serviceUrl": "http://your-server-ip:8080/api/gallery""extensions.gallery.recommendationsUrl": "http://your-server-ip:8080/api/gallery/recommendations"
注意:/api/gallery 是固定路径,不能省略;your-server-ip 不能写 localhost(除非客户端和服务端在同一台机器);改完保存后需重启 VS Code 才生效。
插件更新行为与离线限制的真实表现
私有源不等于全自动更新。它只解决“从哪查新版本”和“从哪下载”的问题,但以下逻辑仍由客户端控制:
- VS Code 默认**不会自动检查更新**,需手动点击扩展面板右上角 “…” → “检查扩展更新”
- 更新时仍会校验插件签名和依赖关系,如果某个插件依赖另一个未上传到私有源的扩展(如
ms-vscode.vscode-typescript-next),更新会失败并静默跳过 - 私有源里的插件版本一旦上传,就不会自动同步上游变更 —— 你得定期在外网重新下载新版
.vsix,再拷进--extensions-dir目录并重启服务
最容易被忽略的是:私有源本身不提供“更新通知气泡”,也不触发 extensions.autoUpdate 设置。想让团队感知更新,得靠流程管理,而不是技术自动兜底。











