必须同时关闭 extensions.autoUpdate 和 extensions.autoCheckUpdates 才能彻底禁用插件自动更新,否则仍会轮询、弹窗或静默升级;还需检查工作区 .vscode/settings.json 覆盖、插件独立通知及命令行参数 --disable-extension-updates。

插件自动更新必须关,否则半夜升级可能直接让 Extension host terminated unexpectedly —— 这不是警告,是已经发生过的真实报错。
extensions.autoUpdate 和 extensions.autoCheckUpdates 必须同时设为 false
很多人只关了 extensions.autoUpdate,结果插件还是在右下角弹“Update available”,甚至静默下载完就卡住。这是因为 VSCode 默认每小时轮询一次更新源,靠的是 extensions.autoCheckUpdates 控制的后台检查逻辑,它和安装行为完全解耦。
-
extensions.autoUpdate: 设为false才真正阻止自动安装,设成manual或留空仍会下载并弹窗 -
extensions.autoCheckUpdates: 设为false后,VSCode 不再发起 HTTP 请求查新版本,带宽、CPU、通知气泡全停 - 两个字段必须同时出现在
settings.json里,GUI 设置有时不同步,尤其用了 Settings Sync 或团队模板时
项目级配置可能覆盖全局设置,务必检查 .vscode/settings.json
你全局设好了 "extensions.autoUpdate": false,但一打开某个 Git 仓库,插件又开始自动升级——大概率是项目根目录下的 .vscode/settings.json 里写了 "extensions.autoUpdate": true。VSCode 的配置优先级是:工作区 > 用户 > 默认,局部配置能直接绕过你点的那些开关。
- 执行
Ctrl+Shift+P→ 输入Preferences: Open Workspace Settings (JSON),检查是否存在冲突项 - CI 脚本或脚手架(如 create-react-app 模板)常自带这类配置,别盲目信任“刚初始化的项目”
- 如果确认要统一禁用,可在工作区设置中显式写入
"extensions.autoUpdate": false覆盖掉父级
特定插件的通知绕过 VSCode 通用开关,得单独处理
GitLens、ESLint、Prettier 这类插件不走 extensions.autoUpdate 流程,而是自己调用 vscode.window.showInformationMessage 弹通知。你关了所有全局开关,它们照常在右下角刷“New release available”。
- GitLens:搜
gitlens.advanced.messages,设为[];或关gitlens.telemetry.enabled - ESLint:设
eslint.lintTask.enable为false可减少触发时机,但本质要等插件自身提供eslint.disableUpdateNotification类开关 - Prettier:目前无官方静音开关,临时解法是手动安装旧版后,在扩展页点击齿轮 →
Disable Auto Update(部分版本支持)
命令行启动时加 --disable-extension-updates 最可靠
图形界面和 JSON 配置都可能被重写(比如大版本升级后 settings.json 被重置),而命令行参数每次启动都强制生效,不依赖任何持久化配置。
- 退出所有 VSCode 实例,终端执行:
code --disable-extension-updates - 该参数会跳过所有扩展更新检查逻辑,包括
autoCheckUpdates的轮询和autoUpdate的安装流程 - 适合 CI 环境、演示场景、或你正在调试一个对插件版本极其敏感的项目(比如旧版 TypeScript 插件 + 特定 tsconfig)
- 注意:这个参数不影响主程序更新,
update.mode仍需单独设为"none"
最麻烦的不是找不到开关,而是你以为关完了,结果某天发现 ~/.vscode/extensions/ 下多出一个带时间戳的新版本文件夹,而旧版插件已停止响应 —— 这说明至少有一层机制漏掉了,通常就是 autoCheckUpdates 没关,或者工作区配置偷偷启用了它。


















