code --install-extension 无法增量更新插件,因 vscode 原生命令行及 marketplace 均不支持 delta patch,每次更新必全量下载整个 .vsix 包;仅少数插件(如 ms-python.python、rust-lang.rust-analyzer)在运行时对 lsp 服务器等依赖做按需更新,但 .vsix 主体仍为完整覆盖安装。

为什么 code --install-extension 无法增量更新插件
VSCode 原生命令行工具不支持「只下载差异部分」的增量更新。每次执行 code --install-extension 或点击 UI 上的「更新」,都会完整下载整个 .vsix 包(通常几 MB 到上百 MB),即使仅改动了一个 JSON 字段。这是因为 VSCode 插件市场(Marketplace)本身不提供 delta patch 服务,所有分发均基于完整归档包。
哪些插件实际触发了“伪增量”行为
少数插件在自身实现中做了轻量级优化,但和 VSCode 下载机制无关,属于插件运行时行为:
-
ms-python.python:语言服务器二进制(如pyright、debugpy)会按需拉取,首次安装后后续更新可能只下载新版本二进制,但.vsix主体仍全量下载 -
rust-lang.rust-analyzer:通过ra_lsp_server自动检查并仅替换可执行文件,前提是插件配置了"rust-analyzer.checkOnSave.command": "check"等触发条件 -
esbenp.prettier-vscode:无增量逻辑,但体积小(
真正能绕过全量下载的实操路径
若你控制插件发布流程(比如自研内部插件),可通过以下方式模拟增量效果:
- 把插件拆为「核心逻辑包」+「资源包」:核心包用
.vsix分发(小而稳定),资源包(如语法高亮主题、图标集)走独立 CDN URL,由插件启动时按需fetch()并缓存到context.globalStoragePath - 利用
extensionDependencies拆分依赖:将大体积依赖(如 LSP server)单独打包为另一个插件,设置"extensionDependencies": ["myorg.lsp-server"],这样更新主插件时不会重下 server - CI/CD 构建阶段生成 diff manifest:对比上一版
package.json和dist/内容哈希,若仅文档或 README 变更,则跳过.vsix重推,直接更新 Marketplace 页面描述
注意:code --update-extensions 和 UI 的「Update All」完全不读取这类自定义逻辑,它们只认 Marketplace 返回的最新 .vsix URL。
离线环境下的最小化更新包构造
当你必须手动管理插件版本(如内网开发机),可人工压缩更新范围:
- 用
unzip -l xxx.vsix查看旧版与新版结构差异,重点关注package.json、dist/、node_modules/是否变化 - 若仅
package.json的version和description更新,可直接修改旧.vsix中该文件并重新 zip(需保持 ZIP 元数据顺序一致,否则签名校验失败) - 若
dist/有变更但未引入新依赖,可用rsync -av --delete old/dist/ new/dist/同步,再打包——这比全量下载省带宽,但 VSCode 不校验内容一致性,风险自担
真正的增量下载能力取决于 Marketplace 服务端支持,目前(2026年8月)微软仍未开放 patch API。所有“加速”本质都是规避全量传输路径,而非改变协议层行为。











