VS Code扩展面板每次打开都重新加载,因其不缓存市场完整数据,仅实时请求extensionsGallery.serviceUrl获取元信息,断网即失败,本地仅存已安装扩展的manifest、图标等轻量资源。

VSCode本地不缓存扩展市场(Marketplace)的完整数据,只缓存部分元信息和已安装扩展的 manifest、图标、预览图等轻量资源;它每次打开扩展视图时都向服务端发起实时请求,因此不存在“市场数据本地持久化缓存”这回事。
为什么扩展面板每次打开都要重新加载?
VSCode 的扩展视图(workbench.view.extensions)默认行为是:每次聚焦或刷新时,向 extensionsGallery.serviceUrl(微软市场为 https://marketplace.visualstudio.com/_apis/public/gallery,VSCodium 为 https://open-vsx.org/vscode/gallery)发起新的 POST /extensionquery 请求。这个过程不依赖本地数据库或长期缓存,所以:
- 没有离线市场浏览能力(断网时显示 “Failed to fetch”)
- 搜索关键词、分类筛选、排序结果都是服务端计算后返回的
-
~/.vscode/extensions/下只有已安装扩展的代码包,不含市场列表、评分、描述等元数据
哪些数据会被本地保留?
真正落盘的只有三类与市场间接相关的内容:
-
~/.vscode/extensions/中每个扩展子目录下的package.json和extension.vsixmanifest:含扩展 ID、版本、贡献点、图标路径等静态声明 -
%APPDATA%\Code\Cache\(Windows)或~/Library/Caches/com.microsoft.VSCode.Shipit/(macOS)中的临时 HTTP 缓存:可能包含部分图标、截图、README 片段的响应体,但生命周期短、无结构、不可控 -
Global Storage目录(如%APPDATA%\Code\User\globalStorage\)里某些扩展自己存的缓存(例如 GitHub Pull Requests 扩展会缓存 PR 列表),但这与 Marketplace 本身无关
想实现本地市场镜像或离线可用?得绕过 VSCode 默认机制
官方不提供导出市场全量数据的 API 或 CLI 工具。若你有合规、安全或离线需求,必须自行构建中间层:
- 用
tfx(Azure DevOps CLI)或ovsx(Open VSX CLI)从open-vsx.org或微软 MarketPlace 抓取扩展元数据并生成静态 JSON 索引 - 部署一个兼容 VS Code Gallery 协议的私有服务(如
vscode-private-marketplace或自研 Express 服务),把extensionquery接口指向本地索引 - 修改 VSCode 衍生版(如 VSCodium)的
product.json,将extensionsGallery.serviceUrl指向你的私有服务地址 - 注意:微软原版 VS Code 禁止修改
product.json,强行改会导致更新失败或签名验证报错
真正容易被忽略的是:你以为“缓存了市场”,其实只是浏览器内核顺手存了几张图标;所有可搜索、可排序、带评分的市场能力,全都绑在那条实时 HTTP 链路上——断了,就什么都没有。











