必须用.vscode/extensions.json+.vscode/settings.json提交到git,因settings sync全量合并插件、不区分必需/可选、无版本约束、易推入冲突插件,且内网/sso环境下常失效。

不能只靠 Settings Sync,必须用 .vscode/extensions.json + .vscode/settings.json 提交到 Git,并配合手动版本冻结手段。
为什么 Settings Sync 不适合团队插件版本控制
Settings Sync 会把所有设备上的扩展全量合并,不区分必需/可选,也不带版本信息。比如某人本地装了 ms-vscode.js-debug-nightly,Sync 会把它推给整个团队;Python 项目里混进 Rust 插件也完全不拦截。更关键的是,它无法表达“必须是 esbenp.prettier-vscode v14.2.0”,只记录“已安装”。内网或 SSO 环境下 Sync 常登录失败,且一旦插件 ID 冲突(如两个 Formatter),新人 clone 仓库后根本不知道该禁用哪个。
.vscode/extensions.json 的写法和生效条件
这个文件只起推荐作用,但它是唯一能进 Git、可 review、有上下文的方案:
- 必须放在项目根目录的
.vscode/extensions.json路径下,否则 VSCode 不识别 - 字段名是
recommendations,不是extensions或required - 扩展 ID 必须精确,例如 Prettier 是
esbenp.prettier-vscode,不是prettier - 可加
unwantedRecommendations屏蔽冲突项,比如"ms-vscode.js-debug-nightly"
怎么让推荐插件真正“锁住版本”
VSCode 原生不支持语义化版本锁定(如 esbenp.prettier-vscode@14.2.0),但可通过组合操作实现事实冻结:
- 先在 Extensions 视图右键卸载目标插件
- 去 Marketplace 页面点「Download Extension」,手动下载对应
.vsix文件(注意核对发布时间和版本号) - 执行命令
Extensions: Install from VSIX安装该文件 - 在用户级
settings.json中设"extensions.autoUpdate": false,并同步关掉extensions.autoCheckUpdates和workbench.enableExperiments - 对 GitLens、ESLint、Prettier 这类插件,还要单独加静音配置:如
gitlens.advanced.messages: []、eslint.packageManager: null、prettier.enableUpdateCheck: false
容易被忽略的权限与路径细节
手动安装的 .vsix 文件会被解压到 %USERPROFILE%\.vscode\extensions\(Windows)或 $HOME/.vscode/extensions/(macOS/Linux)。如果插件目录被系统策略设为只读,或者你用了 portable 模式,VSCode 可能静默失败——此时需检查开发者工具 Console 里的 Failed to install extension 错误,而不是单纯看 UI 是否提示成功。











