launch.json中配置"type": "pwa-extensionhost"是为了启动专用的“Extension Development Host”实例,使插件在隔离环境中被自动安装并支持断点调试;若误用pwa-node则因插件非独立脚本而失败。

VSCode插件本身不能直接按F5运行,必须通过“Extension Development Host”环境启动调试——这是新手最常卡住的第一步。
为什么 launch.json 里要配 "type": "pwa-extensionhost"
VSCode插件不是独立进程,它运行在 VSCode 主进程加载的 Extension Host 子进程中。普通 Node.js 调试(type: "pwa-node")会失败,因为插件代码没被当作可执行脚本加载,而是由 VSCode 的模块系统动态 require 的。
-
type: "pwa-extensionhost"告诉调试器:请启动一个干净的 VSCode 实例(即 Extension Development Host),并把当前插件自动安装进去 - 这个新窗口左下角会显示
[Extension Development Host]字样,所有断点、日志、命令注册都只在这个窗口里生效 - 如果误用了
type: "pwa-node",你会看到Cannot find module './extension'或直接无响应
package.json 中 activationEvents 写错会导致断点不命中
插件默认是懒加载的,activate() 函数不会在 Extension Development Host 启动时立刻执行,而是在满足 activationEvents 条件后才触发。常见错误是删掉了默认的 onCommand 却没补上其他激活方式。
- 比如你只注册了
myExtension.doSomething命令,但activationEvents里还是空数组或只有onStartup,那命令面板里搜得到命令,但点它之前activate()根本没跑,断点自然不触发 - 调试阶段建议先写死
"activationEvents": ["onCommand:myExtension.doSomething"],确保每次点命令都能进断点 - 不要依赖
onLanguage:json这类事件做初始调试——你得先打开一个 .json 文件,再触发命令,路径太长容易漏步骤
修改 extension.ts 后必须重启 Extension Development Host
VSCode 插件调试不支持热重载。改完代码保存后,仅靠 Ctrl+Shift+P → “Developer: Restart Extension Host” 是不够的——它只重启 Extension Host 进程,但不会重新加载你本地 src/ 下的代码变更。
- 正确做法:停止当前调试会话(Shift+F5),然后重新按 F5 启动 —— 这会拉起一个全新实例,并重新编译 + 加载你的最新代码
- 如果你启用了 TypeScript 编译监听(
tsc -w),记得确认out/extension.js确实更新了,否则你调试的还是旧逻辑 - 常见错觉:“我改了 console.log,怎么没输出?”——大概率是忘了重启调试,还在跑上一轮的缓存版本
真正麻烦的不是配置,而是你改了三行代码却在找哪一行没生效;最容易忽略的是:你正在看的那个 VSCode 窗口,根本就不是调试目标窗口。


















