VSCode不缓存.vsix文件,需主动重新下载;正确做法是先用code --list-extensions --show-versions生成带版本清单,再通过Marketplace API查询最新assetUri拼出有效下载链接,最后批量下载并按publisher.name@x.y.z.vsix命名保存。

VSCode 本身不生成或缓存 .vsix 文件
你执行 code --install-extension ms-python.python 时,VS Code 是直接从 Marketplace 下载并解压到 extensions/ 目录的,不会在本地留下原始 .vsix 文件。所以「备份已安装插件的 .vsix」不是读取某个缓存文件夹,而是要主动重新下载——这一步必须手动触发或脚本化。
怎么批量构造有效 .vsix 下载链接
Marketplace 页面 URL 中的 items? 替换为 itemfile/download? 是最直接的方法,但有严格前提:
- 链接有效期约 24 小时,过期返回
404 - 必须用最新
itemName(比如ms-python.python),旧插件页可能已重定向或下架 - 不能用 GitHub 源码链接代替:很多插件仓库 ≠ marketplace 发布版,
.vsix包含编译产物、签名和元数据
推荐做法是先用 API 查最新版本号,再拼地址:https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery(需带 User-Agent 和 Accept: application/json)→ 解析 versions[0].assetUri → 拼成 {assetUri}/vspackage
用 code 命令导出清单后离线下载的实操要点
先运行以下命令生成带版本的清单:
code --list-extensions --show-versions > extensions.list
这个文件每行形如 ms-python.python@2024.10.1,是后续所有操作的基础。注意:
- Windows 用户若用 PowerShell,保存
extensions.list时务必选 UTF-8 编码,否则中文插件名乱码 - 别用
code --list-extensions > extensions.txt(漏版本),恢复时可能装错版,导致 LSP 崩溃或语法高亮失效 - 导出前确保
code已加入 PATH;macOS/Linux 可通过命令面板运行Shell Command: Install 'code' command in PATH
真正能复用的离线包结构长什么样
一个可跨机器、跨网络复用的离线插件包,至少包含三部分:
-
extensions.list:带版本的插件 ID 清单(必需) -
vsix/目录:每个插件对应一个.vsix文件,文件名建议统一为publisher.name@x.y.z.vsix -
restore.ps1或restore.sh:调用code --install-extension --force批量安装,加--force防止某个插件校验失败卡死
直接复制 .vscode/extensions 文件夹进去没用——那是解压后的运行时目录,混着不同架构/VS Code 版本的二进制模块,迁移到新机大概率报 Cannot find module './extension' 或图标消失。


















