vscode 调试 elysia + bun 需配置 type 为 "pwa-node",runtimeexecutable 设为 "bun",runtimeargs 包含 "--inspect-brk" 和入口文件,启用 sourcemap;监听地址、热重载、测试集成均有特定限制。

VSCode 调试 Elysia + Bun 项目,核心难点不在框架本身,而在调试器根本连不上 Bun 的 --inspect 端口——默认 launch.json 配置会静默失败,断点全灰。
launch.json 怎么配才能让 VSCode 附加到 Bun 进程
VSCode 的 Node.js 调试器(pwa-node)不识别 bun run 命令,直接套用 Node 配置会卡在 “Waiting for debugger to attach”。必须显式指定可执行文件和调试参数。
-
type必须为"pwa-node"(不是node),这是 VSCode 当前唯一支持 Bun 调试的类型 -
runtimeExecutable指向bun可执行文件路径;推荐写"bun"并确保它在系统PATH中(验证方式:终端里运行bun --version成功) -
runtimeArgs必须包含--inspect-brk,否则断点不会在启动时暂停;端口默认是9229,不要改 -
program指向入口文件,如"${workspaceFolder}/src/index.ts";不能写src/目录或省略后缀 - 如果用 TypeScript,确保
tsconfig.json启用了"sourceMap": true,且编译输出路径与outFiles匹配(Elysia 通常直跑 TS,但 VSCode 调试仍需 source map)
最小可用配置示例:
{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Elysia (Bun)",
"runtimeExecutable": "bun",
"runtimeArgs": ["--inspect-brk", "src/index.ts"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": ["<node_internals>/**"]
}
]
}</node_internals>
Elysia 路由断点不命中?先确认服务真跑起来了
VSCode 显示“已连接”,但点击路由断点没反应,大概率是请求压根没进 Elysia 实例——常见于监听地址、端口或中间件拦截问题。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- Elysia 默认只监听
localhost:3000,如果前端发请求到127.0.0.1:3000或0.0.0.0:3000,某些系统(尤其是 Windows + 防火墙)会拒绝连接,导致请求超时而非 404 - 检查
.listen()调用是否带了hostname参数,例如.listen(3000, { hostname: "0.0.0.0" });开发阶段建议显式写{ hostname: "localhost" }避免歧义 - 如果用了
cors()或自定义中间件,它们可能提前return或抛错,跳过后续路由;加个最外层日志中间件验证执行流:app.on("request", ({ request }) => console.log(request.url)) - Bun 的
--inspect-brk会阻塞进程启动,直到调试器连接成功;如果 VSCode 启动慢于 Bun,服务可能已退出——务必在 VSCode 启动调试前,确保终端没报错
为什么改了代码后断点失效,甚至调试器自动断开
Elysia 本身不提供热重载,但开发者常误用 nodemon 或 bun --watch 配合调试,这会导致调试器反复失联。
-
bun --watch src/index.ts重启时会释放原--inspect端口,VSCode 无法自动重连新进程,表现为“断点变灰”“调试控制台空白” - VSCode 的
Auto Attach功能对 Bun 支持不稳定,不建议开启;应坚持单次启动 + 手动刷新 - 真正安全的开发流是:关闭所有 watch,用 VSCode 调试器启动 → 修改代码 → 点击调试面板顶部的“重启”按钮(或
Ctrl+Shift+F5),它会杀掉旧进程并重新执行runtimeArgs - 如果必须热重载,改用 Bun 原生方案:
bun run --hot src/index.ts,但它不兼容--inspect,二者不可共存
测试侧边栏不显示 Elysia 测试?Bun test 和 VSCode 测试面板是两套体系
Elysia 自身无测试发现机制,它依赖 Bun 内置的 bun test;而 VSCode 测试侧边栏(Test Explorer)需要适配器协议支持,Bun 目前不提供官方适配器。
- 别指望右键点击
describe()旁边 ▶️ 就能运行——那需要tasks.json配好label: "test"且group: "test" - 手动配置
.vscode/tasks.json是必须的,command设为"bun test",args加上"${fileBasename}"可实现单文件运行 - 测试文件名必须符合 Bun 规范:
*.test.{ts,js}(小写.test.),放在test/目录或与源码同级;src/api.test.ts✅,src/__tests__/api.spec.ts❌ - 想在侧边栏看到测试,只能装第三方插件如
Bun Test Explorer;但注意它不支持 Elysia 特有语法(比如it.concurrent),仅识别标准describe/it
最易被忽略的一点:Bun 的 --inspect-brk 和 bun test 互斥——调试服务时不能同时跑测试,反之亦然。开发中得在 launch.json 和 tasks.json 之间手动切换上下文,没有“一键全链路”方案。










