extensions.json 是社区约定的插件清单快照格式,非 vscode 原生支持,无法自动安装插件;需配合 code --install-extension 命令或脚本使用,且必须含版本号以确保环境一致。

如何用 extensions.json 统一管理 VSCode 插件列表
直接结论:extensions.json 本身不是 VSCode 原生支持的配置文件,它只是社区约定的一种「插件清单快照」格式,不能自动安装插件,也不能被 VSCode 直接读取生效。想靠它一键同步环境?必须配合命令行或脚本。
常见错误现象是把 extensions.json 放进工作区根目录或 .vscode/ 下,以为打开文件夹就会自动装插件——结果什么也没发生。
-
extensions.json本质是手动导出的 JSON 列表,生成方式只有两种:code --list-extensions --show-versions命令输出重定向,或通过 Settings UI 手动复制 - VSCode 不解析该文件,也不提供 import 功能;它只认
extensions字段(仅限 devcontainer 或 product.json 等极少数场景) - 真正能驱动安装的是 shell 脚本或 CI 步骤:逐行读取
extensions.json中的id@version,再调用code --install-extension
生成 extensions.json 的可靠命令(含版本号)
不带 --show-versions 的导出结果无法复现环境,因为同一插件名可能对应多个兼容版本,尤其在团队协作或 CI 构建时容易因版本漂移导致功能异常。
推荐在终端中执行:
code --list-extensions --show-versions > extensions.json
注意:code 命令需已加入系统 PATH(macOS/Linux 检查是否运行过「Shell Command: Install 'code' command in PATH」;Windows 确保勾选了「Add to PATH」安装选项)。
- 输出格式为每行一个
publisher.name@version,例如:ms-python.python@2024.10.1 - 若只想导出已启用插件(排除禁用项),需额外过滤:
code --list-extensions --show-versions | xargs -I {} sh -c 'code --show-extensions | grep -q "{}" && echo {}' - Windows PowerShell 用户请改用:
code --list-extensions --show-versions | Out-File -FilePath extensions.json -Encoding UTF8
用 extensions.json 自动安装插件的最小可行脚本
单纯有 extensions.json 没用,得让它动起来。下面是一段跨平台可用的 Bash 脚本(Windows 可用 Git Bash 或 WSL 运行),不依赖额外工具:
#!/bin/bash while IFS= read -r line; do [ -z "$line" ] && continue echo "Installing $line..." code --install-extension "$line" --force done <p><code>--force</code> 参数关键:避免因本地已存在旧版本而跳过安装,确保版本严格对齐。</p>
- 脚本需与
extensions.json同目录,赋予可执行权限:chmod +x install-ext.sh - 如果插件市场访问受限(如国内),提前配置镜像源:
code --install-extension ms-python.python --proxy-server=http://127.0.0.1:7890 - CI 场景下建议加超时和重试逻辑,部分插件(如
esbenp.prettier-vscode)在网络波动时会卡住
extensions.json 在多环境下的实际局限性
它解决不了「哪些插件该进列表」这个根本问题。很多团队把所有装过的插件全导出来,结果 extensions.json 里混着 Python、Rust、Docker 插件,而某个前端项目根本用不上。
更现实的做法是按角色或项目类型维护多个清单:
-
extensions.frontend.json:含esbenp.prettier-vscode、dbaeumer.vscode-eslint、bradlc.vscode-tailwindcss -
extensions.python.json:含ms-python.python、ms-python.pylint、ms-python.black-formatter - 不要把
github.copilot这类需要登录/付费的插件写死进共享清单,否则其他成员执行脚本会失败 - 某些插件(如
ms-vscode-remote.remote-containers)只在远程开发时生效,本地安装无意义,应从通用清单中剥离
真正麻烦的从来不是怎么存插件名,而是谁决定哪个插件该出现在哪份清单里——这得靠团队约定,不是靠文件格式能解决的。











