program字段不能写.ts路径,必须指向可执行JS文件或ts-node二进制(如node_modules/.bin/ts-node),再通过args传.ts入口,并配runtimeArgs启用ts-node及--inspect-brk。

launch.json 里 program 字段不能写 .ts 文件路径
VSCode 的 node 调试器原生只认 JavaScript,program 必须指向可执行的 JS 入口(如 dist/index.js)或 ts-node 的启动脚本。直接写 "program": "${workspaceFolder}/src/index.ts" 会导致调试器静默失败——它不会报错,但断点永远不命中。
正确做法是用 runtimeArgs 驱动 ts-node,把 program 指向 ts-node 自身的 bin 文件:
-
program设为"${workspaceFolder}/node_modules/ts-node/dist/bin.js"(v10+)或"${workspaceFolder}/node_modules/.bin/ts-node"(注意:Windows 下是ts-node.cmd) -
args放真正的 TS 入口,例如["${workspaceFolder}/src/index.ts"] - 必须加
"runtimeArgs": ["--esm"](如果package.json有"type": "module"),否则会报ERR_UNKNOWN_FILE_EXTENSION ".ts"
path-mapping(别名)在调试时失效的根源
TS 的 paths 配置(如 "@/*": ["src/*"])只在编译期被 tsc 或 ts-node 解析,而 VSCode 调试器本身不参与路径解析。断点打在 import { foo } from "@/utils" 对应的 src/utils/index.ts 上,但调试器实际加载的是 node_modules/ts-node/dist-xxx/... 内部路径,source map 映射链就断了。
解决方案不是“关掉 paths”,而是让 source map 显式覆盖别名路径:
- 确保
tsconfig.json启用"sourceMap": true和"baseUrl": "." - 在
launch.json中加"resolveSourceMapLocations": ["${workspaceFolder}/src/**", "!**/node_modules/**"] - 若使用
tsconfig-paths,需额外在runtimeArgs中加入-r tsconfig-paths/register
ts-node + ESM 项目调试必开的两个开关
Node ≥ 18 默认启用 ESM,但 ts-node 的 ESM 支持仍不稳定。常见现象:断点生效但变量值显示 undefined、this 指向错误、模块导入失败。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
必须同时满足以下条件:
-
package.json中保留"type": "module"(删掉它虽能绕过,但破坏项目一致性) -
launch.json的runtimeArgs包含--experimental-specifier-resolution=node和--loader ts-node/esm -
tsconfig.json的"module"设为"ESNext",且"moduleResolution"为"Bundler"(非"Node")
漏掉任一,ts-node 就无法正确解析 import 或生成可用的 source map。
调试器连不上 ts-node 进程?检查 --inspect 参数位置
ts-node 默认不开启 inspector,仅靠 runtimeArgs: ["-r", "ts-node/register"] 不足以启用调试协议。VSCode 会尝试连接一个根本不存在的调试端口,表现为“正在连接…”后超时。
正确写法是把 --inspect-brk 放在 runtimeArgs 最前面,并确保它作用于 node 进程本身:
- ✅ 正确:
"runtimeArgs": ["--inspect-brk=9229", "-r", "ts-node/register"] - ❌ 错误:
"args": ["--inspect-brk=9229", "src/index.ts"](这是传给 ts-node 的参数,不是 node 的) - 端口号建议固定(如
9229),避免每次随机,方便 attach 或配合 Docker 使用
如果用了 nodemon,还要确认它的 --inspect-brk 是传给子进程的,不是 nodemon 自己——得用 nodemon --exec node --inspect-brk=9229 -r ts-node/register src/index.ts 这类结构。

















