ts-node 替代方案盘点:6 大 TS 执行方案
ts-node 启动慢、ESM 配置繁琐。本文盘点 6 大替代:Node 原生 TS 支持、TSX、Bun、Deno、vite-node 与 Jiti。
日常开发首选 TSX(esbuild 速度 + watch 体验);Node 22.6+ 简单脚本可用原生类型剥离;工具链内嵌加载用 Jiti;Vitest 项目用 vite-node。ts-node 的时代已经结束——除存量维护外没有选用理由。
ts-node 的问题
完整编译带来的启动迟缓、内存占用,ESM 模式配置繁琐,维护节奏放缓——它完成了历史使命。
1. Node.js 原生 TypeScript
Node 23.6 稳定类型剥离:node app.ts 直接运行。零依赖、官方支持——简单脚本的最简答案。边界:无路径别名、无类型依赖特性。
2. TSX:开发者之选
esbuild 内核极速启动、tsx watch 热重载、自动读 tsconfig paths——开发体验最完整。本系列有专文(《TSX 入门》《TSX 与 ts-node 对比》)。
3. Bun:运行时替代
bun run app.ts——TS 支持是运行时内置能力。接受 Bun 运行时即获得最顺的 TS 执行体验。
4. Deno:TS 母语运行时
TS 是 Deno 的一等公民(含类型检查)。跨运行时迁移的选项,见《Node.js 与 Deno 原生 TS 对比》。
5. vite-node
Vitest 的执行引擎独立可用——已经在用 Vitest 的项目,vite-node 复用同一管道(转换配置一致)。
6. Jiti:嵌入式加载
工具链加载用户 TS 配置的场景之王(Nuxt/ESLint 在用),磁盘缓存二次加载零成本。见《Jiti 入门》。
速查
| 场景 | 选择 |
|---|---|
| 开发跑应用 | TSX |
| 简单脚本 | Node 原生 / Bun |
| 工具链内嵌 | Jiti |
| Vitest 项目 | vite-node |
常见问题(FAQ)
Q:ts-node 项目迁移成本?
极低:换启动命令、删配置、确认类型检查有 tsc --noEmit 兜底。
Q:这些方案都不做类型检查?
正确——运行时类型检查是 ts-node 时代的负担。现代共识:编辑器实时检查 + CI 全量检查,运行时只负责跑。
Q:生产环境用哪个?
都不用——生产跑 tsc/SWC 的编译产物。这些是开发期工具。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。