Hono调试断点失效的根本原因是ESM与调试器兼容性问题:Node调试器不支持ESM,需用Deno或tsx配合正确launch.json配置、source map生成及热重载同步。

VSCode 调试 Hono 时 node --inspect 不生效?
根本原因是 Hono 默认运行在纯 ESM 环境(尤其搭配 deno run 或 tsx),而 VSCode 的 Node.js 调试器只支持 CommonJS 模式下的 --inspect。直接用 Node 启动 Hono 项目会报 ERR_REQUIRE_ESM,断点全灰。
- 别用
node --inspect启动 Hono 入口文件(比如index.ts)——它不是普通 Node 服务 - 真要用 Node 调试,得先编译成 JS + CJS,且确保
package.json中没有"type": "module" - 更靠谱的路径是:用 Deno 官方调试协议(VSCode 内置支持),或改用
tsx并启用其--inspect标志(需 v4.8+)
Hono + Deno 环境下 VSCode 断点全不命中?
Deno 默认禁用源码映射(source map),且 VSCode 的 Deno 扩展必须显式激活调试配置,否则断点只是摆设。
- 确认已安装最新版 Deno 扩展(由 denoland 官方发布),并重启 VSCode
- 在项目根目录建
.vscode/launch.json,内容必须包含"type": "pwa-deno"和"request": "launch" -
program字段要写绝对路径或相对于工作区的路径,例如"${workspaceFolder}/server.ts",不能写deno run server.ts - 启动前务必在终端执行一次
deno task dev(或你定义的启动命令),让 Deno 缓存依赖和生成 sourcemap
用 tsx 跑 Hono 时如何让断点进 handler 函数?
tsx 是目前对 Hono + VSCode 调试最友好的运行时,但它默认跳过 node_modules 里的断点,而 Hono 的路由逻辑可能被优化进内部模块。
- 在
launch.json中加配置:"skipFiles": ["<node_internals>/**"]</node_internals>,去掉默认的"node_modules/**" - 确保
tsx版本 ≥ 4.8,并在启动命令里显式加--inspect,例如:tsx --inspect --watch server.ts - 断点别打在
app.get("/", ...)这行,而是打在回调函数内部,比如const handler = () => { /* 在这里打 */ } - 如果用
Hono<adapter></adapter>(如 Cloudflare Workers),调试器无法进入适配层,只能调试你写的 handler 逻辑
为什么修改代码后断点失效、堆栈显示 eval?
这是热重载(--watch)与调试器 sourcemap 不同步导致的典型现象。VSCode 加载的是旧 map,但执行的是新编译代码。
- 每次保存后,观察终端是否输出
[tsx] reload started—— 没有就说明 watch 没生效,检查tsx是否监听了正确文件 - 不要在
launch.json里同时开"restart": true和tsx --watch,二者冲突,选一个 - 临时解决办法:改完代码后手动按
Ctrl+Shift+F5(重启调试),比等自动 reload 更可靠 - 若长期遇到,把
tsx升级到 v4.10+,它修复了 watch 下 sourcemap 更新延迟问题
调试 Hono 的关键不在“怎么设断点”,而在“让调试器看到你写的源码”。Deno 或 tsx 的 sourcemap 生成时机、VSCode 的 launch 配置、以及热重载的生命周期,三者稍有错位,断点就失效。别怀疑代码,先看终端有没有报 sourcemap missing。


















