VS Code 无法将已安装插件导出为可用 .vsix 文件,因其解压目录缺失签名、元数据压缩结构及 marketplace 兼容性校验;code --install-extension 仅支持 .vsix 文件或 publisher.name ID,不接受本地解压目录。

不能直接导出已安装插件为 .vsix 文件——VS Code 没有内置命令或 UI 选项支持从本地 extensions 目录反向打包成可用的 .vsix。你看到的已安装插件,是解压后的运行态目录,缺失签名、元数据压缩结构和 marketplace 兼容性校验,强行 zip 成 .vsix 会导致安装失败或静默禁用。
为什么 code --install-extension 不接受本地目录路径
VS Code 的 code --install-extension 命令只接受两种输入:.vsix 文件路径 或 publisher.name ID。它内部会校验 package.json 签名、extensionKind 字段、engines.vscode 版本兼容性。若你把 ~/.vscode/extensions/ms-python.python 这种解压后文件夹拖进去,会报错 ENOENT 或 Extension 'xxx' not found,因为它根本不是合法安装包。
真正能落地的离线插件获取方式
必须回到 marketplace 获取原始 .vsix,而非从已安装目录提取:
- 最稳:打开插件市场页(如
https://marketplace.visualstudio.com/items?itemName=ms-python.python),点右上角 Download Extension 按钮 → 得到签名完整、版本匹配的 .vsix - 批量推荐:
vsixget工具自动拉取:pipx install vsixget && vsixget --latest ms-python.python,它会解析页面、选最新兼容版、下载并重命名,避免手动抄错版本号 - 脚本化拼 URL(仅限确定版本时):
https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2026.10.0/vspackage——注意publisher和extension要从itemName拆(ms-python.python → ms-python / python),version必须去 Version History 页面核对,填错直接 404
备份时容易忽略的三个关键点
很多人以为“导出插件列表 + 下载 .vsix”就完事了,但实际迁移后常卡在启动阶段:
-
engines.vscode字段不匹配:比如你 VS Code 是 1.85.0,而下载的 .vsix 要求"^1.90.0",装上也不会激活;查方法是解压 .vsix,看根目录package.json里的engines字段 - 二进制依赖未同步:像
ms-vscode.cpptools、ms-python.pylance这类插件,.vsix 里含平台特定的.dll/.so,Windows 上下载的包不能直接扔进 Linux 机器的code --install-extension - 未签名扩展被拦截:首次启用时弹窗提示
This extension is not signed,需提前在目标机设置里关掉extensions.experimental.affinity或设为1,否则 CLI 安装后仍处于禁用状态
真正可靠的备份,是把 code --list-extensions 输出的 ID 清单、对应版本号(来自 marketplace Version History)、目标机器 VS Code 版本、操作系统架构这四项记在一起,缺一不可。.vsix 文件本身只是载体,不是真相。


















