launch.json 必须配置为"type": "extensionhost"才能调试vscode插件,因其需启动插件宿主实例而非普通node.js进程;关键字段包括runtimeexecutable、args指定扩展路径及outfiles映射编译输出。

launch.json 配置不对,插件调试根本起不来——这是最常卡住人的地方。VSCode 插件本身是 TypeScript/JavaScript 写的,调试它不是运行普通 Node.js 脚本,而是要让 VSCode 启动一个“插件宿主实例”,并把你的插件加载进去。直接用默认的 Node.js 调试配置,Debug: Launch Program 会报错找不到入口、Cannot connect to runtime process 或直接无响应。
为什么不能直接用默认 Node.js 配置调试插件
VSCode 插件运行在 VSCode 的 Extension Host 进程中,不是独立 Node.js 进程。你写的 extension.ts 不是靠 node 命令启动的,而是由 VSCode 主进程动态加载并执行的。所以:
– 默认的 node 类型调试器找不到插件入口点;
– 缺少 Extension Development Host 环境(比如 vscode 模块不可用、API 报 undefined);
– 断点打在 activate() 里也永远不会命中。
launch.json 必须用 extensionHost 类型
调试插件时,type 字段必须设为 "extensionHost",而不是 "node" 或 "pwa-node"。这是唯一能触发 VSCode 启动一个干净的“开发版”窗口并加载你插件的配置方式。
关键字段如下:
-
"type": "extensionHost"—— 强制走插件宿主通道 -
"request": "launch"—— 启动新窗口(不是附加到已有进程) -
"runtimeExecutable": "${execPath}"—— 指向当前 VSCode 可执行文件,确保环境一致 -
"args": ["--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=null"]—— 明确告诉它:从这个目录加载插件,不跑测试 -
"outFiles": ["${workspaceFolder}/out/**/*.js"]—— 如果你用 TypeScript,必须指向编译输出目录,否则断点不生效
常见错误现象与修复点
以下问题基本都源于 launch.json 配置偏差或路径没对齐:
-
点击 F5 后弹出新窗口,但插件没加载,状态栏看不到你的命令 → 检查
package.json中main字段是否指向正确的 JS 入口(如./out/extension.js),且该文件存在;TypeScript 编译未完成时,out/目录为空也会导致此问题 -
断点灰色、提示 “unbound breakpoint” → 确认
outFiles路径匹配实际生成位置;如果用了tsconfig.json自定义outDir,必须同步更新launch.json -
新窗口打开后立即崩溃或白屏 → 很可能是
args里漏了--extensionDevelopmentPath,或者路径含中文/空格未加引号(Windows 下尤其敏感) -
控制台报
Cannot find module 'vscode'→ 不是模块缺失,而是调试器没走extensionHost类型,强行当普通 Node.js 跑了
调试前务必确认的三件事
再小的疏忽都会让调试失败:
- 你的项目根目录下有
.vscode/launch.json,且里面只有一个extensionHost配置(别混进其他node配置) - 已运行过
npm run compile或启用了 TS 监听(tsc -w),out/目录非空 - VSCode 已安装官方
Extensions插件开发依赖:打开命令面板(Ctrl+Shift+P),输入Extensions: Install Extension,搜索并安装Extension Pack for TypeScript and JavaScript(含语法支持和调试辅助)
yo code)建个空白插件,对比它的 launch.json 和文件结构——很多坑,其实是抄错了一行配置。











