· 4 分钟
ts-debug
TS 项目debug
1.typecript erasableSyntaxOnly
erasableSyntaxOnly 是 TypeScript 的编译选项,用来限制代码只能使用“删除类型后就能直接运行”的语法。
例如:
{
"compilerOptions": {
"erasableSyntaxOnly": true
}
}
允许:
interface User {
name: string;
}
type Status = "ok" | "error";
function greet(name: string): string {
return `Hello ${name}`;
}
这些语法运行时不需要额外生成代码,删除类型标注即可。
不允许:
enum Color {
Red,
Blue,
}
class User {
constructor(public name: string) {}
}
namespace Utils {}
这些语法虽然写在 .ts 中,但运行时需要 TypeScript 生成额外 JavaScript 代码,因此不是“可擦除”的。
这个选项主要用于配合 Node.js 的原生 TypeScript 类型擦除功能:
node file.ts
这样便能够直接运行/debug ts代码了
2 WebStorm外部attach debug
node --inspect-brk=9229 packages/coding-agent/src/cli.ts
作用是:启动 Node 程序,同时开启调试端口,并在执行第一行用户代码前暂停。
各部分含义:
node:启动 Node.js--inspect-brk=9229:- 开启 Node Inspector 调试协议
- 监听
9229端口 brk表示启动后立即暂停packages/coding-agent/src/cli.ts:运行项目 CLI 入口
执行后终端通常会显示:
Debugger listening on ws://127.0.0.1:9229/...
此时程序还没有真正进入 TUI。接着在 WebStorm 中选择:
Run → Attach to Node.js/Chrome
连接 localhost:9229,然后点击 Resume,程序才会继续启动。之后就可以在源码中打断点调试,同时继续在终端里操作 TUI。
对于这个项目,更建议使用项目已有的启动脚本:
NODE_OPTIONS="--inspect-brk=9229" ./pi-test.sh
因为 pi-test.sh 会额外加载:
packages/coding-agent/src/experimental/source-resolver.ts
直接运行 cli.ts 可能无法正确解析项目源码依赖。
如果不想启动后立即暂停,可以使用:
NODE_OPTIONS="--inspect=9229" ./pi-test.sh
区别是:
--inspect-brk:启动后立即暂停,适合从入口开始调试;--inspect:正常启动,遇到断点时暂停,适合调试某个具体交互流程。
这样便可以调试TUI交互了