vs code 内置插件无法卸载,只能禁用;其代码硬编码在二进制中,禁用仅阻止 activate() 调用,不撤销 contribution 注册,需通过 settings.json 显式关闭相关功能开关。

VS Code 内置插件不能卸载,只能禁用
VS Code 的「内置插件」(如 emeraldwalk.runonsave、ms-vscode.js-debug、ms-vscode.vscode-typescript-next 等)是随编辑器二进制一起打包的,没有提供 Uninstall 按钮。你点击右键只会看到 Disable (Workspace) 或 Disable (User) —— 这不是 UI 缺陷,而是设计限制。
这些插件被硬编码在 vscode/out/vs/platform/extensionManagement/common/builtInExtensions.js 里,启动时由 Extension Host 直接加载,不走 marketplace 安装流程。试图用 code --uninstall-extension ms-vscode.js-debug 会报错:Extension 'ms-vscode.js-debug' is built-in and cannot be uninstalled.
- 禁用后,插件代码仍驻留在安装目录中(Windows 在
C:\Users\<username>\AppData\Local\Programs\Microsoft VSCode\resources\app\extensions\</username>),但不会被激活 - 禁用范围分两级:仅当前工作区生效,或对所有工作区全局生效(选
Disable (User)) - 某些内置插件(如
ms-vscode.references-view)禁用后,对应功能入口(如右键菜单里的 “Find All References”)会直接消失,但底层语言服务不受影响
为什么禁用后仍有残留行为?
禁用 ≠ 停止加载。部分内置插件(尤其是调试器类)会在 VS Code 启动时预注册贡献点(contributes),即使被禁用,其 package.json 中声明的 activationEvents 仍可能触发初始化逻辑。典型现象包括:
- 开发者工具控制台持续输出
[js-debug] initializing...(对应ms-vscode.js-debug) - 状态栏仍显示
JavaScript Debug图标(即使已禁用) -
launch.json模板仍出现在调试配置菜单里
根本原因在于:VS Code 的 activationEvents 是声明式注册的,禁用只阻止 activate() 调用,不撤销 contribution registration。要彻底抑制,需在 settings.json 中显式关闭关联功能:
"debug.javascript.legacy": false"javascript.suggest.autoImports": false-
"editor.codeActionsOnSave": {}(若禁用了runonsave)
想彻底移除内置插件?只有重编译或替换二进制
官方不支持删除内置插件,但技术上可行的操作仅限于高级用户:
- 手动删掉安装目录下的
resources/app/extensions/<extension-id></extension-id>文件夹(例如删掉js-debug文件夹)—— 重启后 VS Code 会报错并自动恢复该目录(从内置资源包重建) - 修改
resources/app/product.json,把对应 extension ID 从"builtInExtensions"数组中剔除,再用 Electron 工具重新签名二进制 —— 此操作违反 EULA,且每次更新都会被覆盖 - 使用 fork 版本(如
vscodium)并自定义 build 配置,剔除不需要的内置扩展 —— 这是唯一可持续方案,但失去 Microsoft 官方更新通道
普通用户遇到冲突或性能问题,应优先通过 settings.json 关闭具体功能开关,而非追求物理删除。内置插件的体积和内存占用普遍低于 5MB,真正影响启动速度的是第三方插件的 node_modules 和未清理的 globalStorage。











