tsc --watch不生成.js文件的根本原因是tsc默认只做类型检查,需在tsconfig.json中显式配置"noEmit": false、"outDir"与"rootDir"匹配,并确保"include"路径正确,否则监听空转无输出。

tsc --watch 为什么改了代码却不生成 .js 文件
根本原因是 tsc 默认只做类型检查,不输出任何文件。即使你加了 --watch,只要配置没告诉它“要落地”,它就只是空转。
-
"noEmit": true(或未显式设为false)会强制禁用输出——检查你的tsconfig.json的compilerOptions里有没有这一项 -
"outDir"和"rootDir"必须成对出现且路径合理,比如"outDir": "./dist"+"rootDir": "./src";若两者都设为"./",tsc可能拒绝编译或误把dist/里的.js当源码二次编译 -
"include"路径写错等于“告诉编译器别编这些文件”:必须用正斜杠、带通配符,例如["src/**/*"];写成["src\**\*"](Windows 风格反斜杠)或["src/**"](缺/*)都会失效 - 临时验证:终端执行
npx tsc --noEmit false,看是否立刻生成.js文件——这是最直接的配置探针
ts-node 直接运行 .ts 文件却报 Cannot use import statement
这不是语法错误,而是模块系统不匹配。Node.js 默认按 CommonJS 解析,而 import 是 ESM 语法,必须显式对齐。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 确保项目根目录有
package.json,且含"type": "module"字段;否则 Node.js 会无视import并报错 -
tsconfig.json中的"module"选项必须和package.json一致:"module": "ESNext"或"module": "NodeNext"才支持 ESM;若设为"CommonJS",就得改用require() - 运行时需加
--esm参数:npx ts-node --esm src/index.ts;漏掉这个,ts-node仍走 CommonJS 流程 - Node.js 版本必须 ≥ 18.12,低版本不支持
--esm参数或"type": "module"的完整语义
launch.json 断点打不进 .ts 文件,总跳到 .js 或提示未绑定
VSCode 调试器靠 source map 把运行时位置映射回源码,但 ts-node 和 tsc 的 map 生成机制完全不同,混用必出问题。
- 用
tsc编译后调试:必须在tsconfig.json开"sourceMap": true,且launch.json的"program"指向编译后的.js(如"${workspaceFolder}/dist/index.js"),不能指.ts - 用
ts-node调试:launch.json必须用"type": "pwa-node",并加"runtimeArgs": ["-r", "ts-node/register"];"program"可以直接指.ts入口,但别再配preLaunchTask: "tsc: build"——它和ts-node冲突 - 无论哪种方式,右下角 TypeScript 版本号点开后必须选
Use Workspace Version;否则编辑器提示和实际执行环境行为不一致 - 每次改完
tsconfig.json,务必按Ctrl+Shift+P→ 输入TypeScript: Restart TS server,否则旧缓存会让断点跳偏
想保存就自动重启服务,nodemon + ts-node 怎么配才不卡死
nodemon 本身不理解 TypeScript,它只监听文件变化并执行命令;卡死、乱码、stdin 假死,基本都是 executor 配错了。
- 不要用
code-runner:它默认命令是node $fileName,不处理编码、ESM、输入流,中文路径下乱码、import报错、process.stdin卡住全是常态 - 推荐
nodemon.json配置:"exec": "npx ts-node --esm ./src/index.ts"(ESM 项目)或"exec": "npx ts-node ./src/index.ts"(CommonJS);"ext": "ts"确保只监听.ts - 若项目用
"type": "module",ts-node必须加--esm,否则nodemon启动的进程会因模块解析失败而退出 -
process.stdin场景下,nodemon无法接管交互式输入——此时应放弃自动重启,改用内置终端手动运行,或用ts-node-dev(它专为热重载设计,对 stdin 支持更好)
tsc 输出路径、ts-node 模块模式、launch.json 入口指向、nodemon 执行命令这四者的严格对齐。少一个,断点就跳偏;错一个,import 就报错;缓存没清,红波浪线就和终端输出打架。

















