extensions.json 是唯一可靠的方式,因 vscode 官方仅支持该文件在首次打开工作区时稳定触发「recommended extensions」横幅;它需置于 .vscode/extensions.json,含 "recommendations" 字段与正确 publisher.name 格式插件 id。

为什么 extensions.json 是唯一可靠的方式
VSCode 本身不提供“推送插件”或“强制安装”的机制,所谓“推荐”只能靠提示——而唯一被官方支持、且在团队打开工作区时稳定触发的,就是根目录下 .vscode/extensions.json 文件。它不会自动安装插件,但会在用户首次打开文件夹时,在 Extensions 视图顶部显示「Recommended Extensions」横幅,并高亮列出你指定的插件。
常见误区是试图用 settings.json 或脚本去安装插件:前者完全无效,后者依赖本地 CLI 且无法跨平台自动执行,实际协作中基本不可靠。
-
extensions.json必须放在项目根目录的.vscode/子目录下,路径为.vscode/extensions.json - 文件内容必须是合法 JSON,顶层为对象,含
"recommendations"字段,值为字符串数组 - 每个字符串是插件的完整 ID,格式为
publisher.name(例如esbenp.prettier-vscode),不是插件名或 marketplace URL - 推荐列表只在用户**首次打开该工作区**时显示;已打开过的工作区需手动点击 Extensions 视图右上角「…」→「Show Recommended Extensions」
如何准确获取插件 ID 而不翻 Marketplace
手输 publisher.name 极易出错(比如写成 prettier.vscode 或漏掉连字符),直接从 VSCode UI 复制最稳:
- 在任意 VSCode 窗口中打开 Extensions 视图(
Ctrl+Shift+X) - 搜索并找到目标插件(如 Prettier)
- 点击插件条目,看地址栏 URL —— 最后一段就是 ID,例如
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode中的esbenp.prettier-vscode - 或右键插件 → 「Copy Extension ID」(VSCode 1.86+ 支持)
注意:有些插件有多个发布者版本(如 ESLint),务必确认是团队统一使用的那个——比如 dbaeumer.vscode-eslint 是官方维护版,roadhump.vscode-eslint 是旧分支,混用会导致规则不一致。
推荐列表要精简,否则等于没推荐
把所有开发可能用到的插件都塞进 recommendations,结果是横幅太长、关键项被淹没,用户直接忽略。真正起作用的推荐,应只包含三类:
-
影响代码行为的:如
esbenp.prettier-vscode(格式化)、dbaeumer.vscode-eslint(校验)、ms-python.python(Python 语言服务) -
团队约定强制启用的:如
editorconfig.editorconfig(读取 .editorconfig)、github.copilot(若全队开通) -
非装不可的调试支持:如
ms-vscode.vscode-typescript-next(TypeScript 版本锁定)、ms-azuretools.vscode-docker(项目用 Docker)
像 bradlc.vscode-tailwindcss 这类框架相关插件,只在明确使用 Tailwind 的项目中加入;通用工具如 shd101wyy.markdown-preview-enhanced 不建议放入,属于个人偏好。
CI/CD 和新成员入职时的配合动作
仅靠 extensions.json 不足以保证环境一致性。它只是第一步提示,后续需配套动作:
- 在项目
README.md开头加一句:“推荐插件已配置,打开项目后按提示安装即可”,避免新人疑惑“为什么没自动装” - 在 CI 流程(如 GitHub Actions)中,用
vscode/extensionsaction 或code --install-extension命令验证关键插件能否正常加载(例如运行 ESLint 检查前先确保dbaeumer.vscode-eslint已就绪) - 对严格环境(如容器化 Dev Container),直接在
.devcontainer/devcontainer.json的"customizations.vscode.recommendedExtensions"字段里复用同一份 ID 列表——Dev Container 启动时会自动安装,比手动推荐更彻底
最容易被忽略的是:推荐插件不解决版本兼容问题。比如 esbenp.prettier-vscode v12.x 可能不兼容 Prettier v3.x 配置,此时光写插件 ID 不够,得在 package.json 的 devDependencies 中锁死对应版本,并在 extensions.json 注释里说明(VSCode 支持 JSONC,可用 // 注释)。











