先确认是否为本地路径问题:VSCode不会自动识别任意文件夹为插件,必须通过“开发:安装从VSIX”或“开发:打开扩展文件夹”手动加载;生成.vsix后安装并重启窗口,再检查命令是否出现在命令面板或状态栏。

插件安装后不生效,怎么确认是本地路径问题?
VSCode 本地开发的插件(比如用 vsce package 打包或直接 npm run watch 启动)如果装上没反应,大概率是没正确指向扩展目录。VSCode 不会自动识别任意文件夹为插件,必须通过「开发:安装从 VSIX」或「开发:打开扩展文件夹」手动加载。
实操建议:
- 先在插件根目录运行
npm run package(或vsce package),生成.vsix文件; - 在 VSCode 命令面板(
Ctrl+Shift+P/Cmd+Shift+P)中执行Extensions: Install from VSIX...,选中刚生成的extension-name-1.0.0.vsix; - 重启 VSCode 窗口(不是重载窗口),否则
package.json中的activationEvents可能不触发; - 检查状态栏或命令面板是否出现你注册的命令(如
extension.helloWorld),这是比“插件已启用”更可靠的生效信号。
调试时断点不命中,是不是 launch.json 配置错了?
本地插件调试依赖 VSCode 自带的 Extension Development Host 环境,不是普通 Node.js 进程。断点失效常见于 launch.json 类型设为 node 而非 extensionHost。
关键配置项(放在 .vscode/launch.json 中):
{
"version": "0.2.0",
"configurations": [
{
"type": "extensionHost",
"request": "launch",
"name": "Launch Extension",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/out/**/*.js"],
"preLaunchTask": "npm: watch"
}
]
}
注意:
-
outFiles必须匹配你实际编译输出路径(TypeScript 用户默认是out/,ESM 项目可能是dist/); - 确保
preLaunchTask真的在运行(比如npm run watch是否监听了src/并输出到out/); - 如果改了
main入口字段(如设为"main": "./dist/extension.js"),outFiles也要同步更新路径。
修改代码后热重载失败,reload window 也不起作用?
VSCode 的 Extension Development Host 默认不支持 HMR,每次改代码必须手动重载 Extension Development Host 窗口(不是主编辑器窗口)。但很多人误点了「Developer: Reload Window」,结果重载的是主窗口,插件进程根本没重启。
正确做法:
- 保持 Extension Development Host 窗口(标题栏含「[Extension Development Host]」字样)打开;
- 按
Ctrl+R(Windows/Linux)或Cmd+R(macOS)——仅对该窗口生效; - 或者点击菜单栏
Developer → Reload Window,确认当前焦点在 Extension Development Host 窗口; - 如果用了
vscode-test写集成测试,it测试块里改代码不会触发重载,必须手动 reload 窗口才能验证新行为。
为什么 package.json 里写了 contributes,但菜单/快捷键/设置项就是不显示?
最常被忽略的是 activationEvents 和 contributes 的联动关系。VSCode 不会提前加载插件,除非某个 activation event 被触发(比如打开特定语言文件、执行某命令、启动时等)。
排查步骤:
- 打开开发者工具(
Help → Toggle Developer Tools),看 Console 是否报错command 'xxx' not found或Cannot find module; - 检查
package.json的activationEvents是否覆盖了你的使用场景(例如添加了"onCommand:myExtension.doSomething",但没注册该命令); - 若想开机即激活,可加
"*"(不推荐)或"onStartupFinished"(较轻量); - 快捷键(
keybindings)和设置项(configuration)属于静态贡献,只要插件激活就会注册,但前提是插件本身成功加载且无语法错误——所以先确保extension.js没抛ReferenceError或SyntaxError。
package.json + activationEvents + 正确的 launch 配置这三样。少一个,就等于没装。


















