code --disable-extensions是唯一能100%跳过所有插件加载的方式,不读取任何配置、不触发activate函数;其他方法如gui禁用或删配置均无法阻止启动早期注入。

直接用 code --disable-extensions 启动,是唯一能 100% 跳过所有插件加载的方式。 其他操作——比如在设置里点“禁用全部扩展”、删掉 .vscode/extensions.json、甚至重装 VSCode——都不能阻止某些插件在启动早期注入代码。只要问题在安全模式下消失,基本就是插件惹的祸。
为什么 --disable-extensions 必须放命令末尾且不能混用 --extensions-dir
VSCode 命令行参数解析有优先级:--disable-extensions 是硬开关,但若它后面还跟了 --extensions-dir,整个参数会被忽略。这不是 bug,是设计逻辑:后者指定扩展根目录,前者要求“不读任何扩展”,二者语义冲突,VSCode 选择信任后者。
常见误操作:
- 写成
code --extensions-dir /tmp/empty --disable-extensions→ 实际只用了空目录,插件仍可能加载(比如从用户目录 fallback) - Windows 上双击快捷方式再拖文件夹进去 → 参数根本没传给进程,
--disable-extensions形同虚设 - macOS 用
open -n -b "com.microsoft.VSCode"却漏掉--args→ 参数被系统吞掉,VSCode 启动时完全不知情
怎么确保打开的是“真正干净”的项目环境
工作区会偷偷启用推荐扩展、继承 settings.json 里的 extensions.disabledExtensions,甚至触发 onLanguage:json 类激活事件——这些都会绕过 GUI 禁用,但在 --disable-extensions 下全无效。关键是要切断所有上下文:
- 终端执行:
code --disable-extensions(空窗口)→ 验证基础环境是否正常 - 再试:
code --disable-extensions /path/to/project(不带任何其他参数)→ 这才是排查项目相关报错的正确姿势 - 避免用图形界面打开:Windows 开始菜单右键“以管理员身份运行”会绕过命令行参数;macOS 用 Finder 双击.app 也不传递
--args
安全模式下问题还在?别急着怀疑 VSCode 本身
如果 code --disable-extensions 启动后依然崩溃、白屏或高 CPU,说明问题出在更底层:
- 打开
Developer: Toggle Developer Tools,看 Console 里有没有Uncaught Error或Failed to load resource—— 特别注意路径是否指向file://协议下的本地资源(比如自定义product.json或主题 CSS) - 检查
Help > Toggle Developer Tools的 Sources 面板,确认没有加载异常的脚本(如被篡改的bootstrap-fork.js) - 某些企业策略会通过注册表(Windows)或 plist(macOS)强制注入 JS,这种行为连
--disable-extensions也拦不住
最常被忽略的一点:VSCode 的“无插件”只是指用户安装的扩展,但内置功能(如 TypeScript 语言服务、JSON 校验器)仍照常运行。如果你的问题出现在打开 .ts 或 .json 文件时,得去查 typescript.preferences.* 或 json.schemas 配置是否指向了不可达地址——这类错误日志往往藏在 Output 面板的 “TypeScript” 或 “JSON” 通道里,而不是 Extension Host。











