根本原因是ts-node启动时找不到项目TS编译器或tsconfig.json,导致降级使用自带TS版本,引发类型检查失效、路径别名解析失败等;必须本地安装依赖、配置合法tsconfig.json、VSCode选Use Workspace Version并重启TS Server。

ts-node 为什么在 VSCode 里跑不起来?
根本原因不是“没装对”,而是 ts-node 启动时找不到 TypeScript 编译器,或读不到你预期的 tsconfig.json。它会 fallback 到自带的 TS 版本,和你项目里配的 "target"、"lib" 不一致,导致类型检查失效、路径别名炸开、甚至 import JSON 都报错。
常见现象:Cannot find module './utils'(但路径明明对)、TS2307: Cannot find module 'xxx'、断点打在 .ts 上却跳到 .js 或直接不生效。
- 必须本地安装:
npm install --save-dev typescript ts-node @types/node(全局装容易版本错位) -
tsconfig.json必须存在且合法——哪怕只写{},否则ts-node可能静默降级为默认配置 - VSCode 右下角 TypeScript 版本号要点击 → Use Workspace Version,否则语言服务用的是编辑器内置 TS,而
ts-node用的是node_modules里的,两者脱节就报错 - 改完
tsconfig.json后,按Ctrl+Shift+P→ 输入TypeScript: Restart TS server,不然缓存会让路径解析和断点映射全乱
launch.json 怎么配才能让断点落在 .ts 上?
VSCode 调试器本身只认 JS,.ts 断点能生效,全靠 ts-node 在启动时注入 source map 映射逻辑——但它不落地文件,只存在内存里,所以配置不能套用 tsc 编译流那一套。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
-
runtimeExecutable必须是"node",不是"npx"或"ts-node" -
runtimeArgs必须包含:["--nolazy", "-r", "ts-node/register"];--nolazy确保源码提前加载,-r是关键入口 -
args填["${workspaceFolder}/src/index.ts"],别用program字段指向.ts文件(那是给tsc编译后执行用的) - 如果项目
package.json有"type": "module",就得换 loader:["--loader=ts-node/esm"](Node.js ≥18.12),-r会直接失败
tsconfig.json 哪些字段对 ts-node 生效?哪些纯属摆设?
ts-node 只读部分 compilerOptions,其余字段基本忽略。它不生成文件,所以 outDir、rootDir、sourceMap、composite、incremental 全无效——写了也不报错,但起不了作用。
- 必须配的:
"moduleResolution": "node"(或"node16"/"nodenext"),否则baseUrl+paths别名无法解析 - 必须配的:
"resolveJsonModule": true,否则import pkg from "./package.json"直接报错 -
"baseUrl"和"paths"会被读取,但ts-node不做路径重写,只用于类型检查阶段;运行时仍靠 Node.js 的模块解析规则 -
"include"写错(比如"src/**"少了个*)会导致部分文件不参与类型检查,但ts-node仍会尝试加载它们——此时报错位置和提示容易误导
为什么改了代码,调试器不自动重启?
ts-node 本身没有热重载能力,每次启动都是全新转译。VSCode 的 launch 配置只负责单次启动,改完保存后得手动点「重新启动」,不像 nodemon 那样监听文件变化。
- 想实现“保存即重启”,得用
nodemon+ts-node组合:npx nodemon --watch "src/**/*.ts" --exec ts-node src/index.ts -
nodemon监听.ts文件,一变就调ts-node重跑,比tsc --watch+node更轻量 - 注意:不要同时开
tsc --watch和nodemon + ts-node,两者都做类型检查,CPU 占用会翻倍 - 大型项目慎用纯
ts-node启动——每次全量类型检查+内存转译,冷启动可能 >3s;tsc --watch编译快,但需额外配nodemon或concurrently触发执行
最易被忽略的一点:ts-node 默认不报类型错误,只做语法转译。any 泛滥、属性未定义、类型不匹配……全静默通过。你以为跑通了,其实只是被绕过去了。真要严格校验,得加 --files 或 --transpile-only false,但会显著拖慢启动速度。

















