ts-node 缓存未清理导致代码变更无效,因其默认启用内存和磁盘缓存;可通过 --no-cache 验证、删除 .ts-node/cache 或全局 .ts-node 目录解决,vscode 调试需在 launch.json 中显式添加 --no-cache。

ts-node 缓存不清理,改完代码却还是跑旧逻辑
不是 TypeScript 编译错了,也不是 tsconfig.json 配置漏了——ts-node 默认启用内存缓存(--cache),它会把已编译的 JS 模块存在内存和磁盘里。一旦你改了类型定义、删了导出、或升级了依赖,但没清缓存,ts-node 就可能复用上次编译结果,导致“代码变了,行为没变”。
怎么确认是 ts-node 缓存惹的祸
最直接的信号:终端报错行号明显对不上当前源码,或者 console.log 输出的变量值和实际代码不一致;再比如改了 export default 为具名导出,但调用处仍能通过默认导入访问——这基本就是缓存没刷新。
- 运行
ts-node --version确认你用的是哪个版本(不同版本缓存策略差异大) - 加
--no-cache参数临时跑一次:ts-node --no-cache script.ts,如果这时行为正常,就坐实是缓存问题 - 检查项目根目录下是否存在
.ts-node文件夹(v10+ 默认缓存位置),里面有cache子目录和哈希命名的 JS 文件
清缓存的三种方式,按优先级选
别一上来就删整个 node_modules——ts-node 的缓存是独立的,且位置固定。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
- 推荐首选:启动时加
--no-cache,开发阶段全程禁用缓存,避免干扰调试 - 快速清理:删掉项目根目录下的
.ts-node/cache目录(注意不是node_modules/.cache) - 全局清除(少见但必要):如果用了
-r ts-node/register方式在 Mocha/Jest 里加载,缓存可能落在~/.ts-node(Linux/macOS)或%LOCALAPPDATA%\ts-node(Windows),删掉整个.ts-node文件夹即可
vscode 调试时 ts-node 缓存不生效?检查 launch.json
VSCode 调试器(node 类型)默认不走 ts-node,除非你显式配置了 runtimeExecutable 或 runtimeArgs。如果你在 launch.json 里写了:
{
"configurations": [{
"type": "node",
"request": "launch",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${file}"]
}]
}
那缓存行为就完全由 ts-node 控制——此时必须确保 runtimeArgs 里包含 --no-cache,否则断点停在旧代码、变量值滞后都是常态。
真正容易被忽略的是:VSCode 的「重启调试」不会自动清 ts-node 缓存,它只重启进程。哪怕你改了 tsconfig.json 里的 compilerOptions,只要缓存文件还在,就照旧用旧编译结果。










