Jiti 和 ts-node 对比:TypeScript 运行时怎么选

ts-node 是 TS 运行时的老牌标准,Jiti 以零配置与智能缓存后来居上。本文从 ESM 兼容、执行方式、测试集成、类型检查等维度全面对比。

最佳实践
类型结构与组件组合插画

日常开发跑 TS 选 Jiti(零配置、ESM/CJS 通吃、磁盘缓存快);需要类型检查与执行一体化、深度 tsconfig 定制的场景 ts-node 仍有用武之地。但大方向上:新项目该评估的是"tsx 或 Jiti",ts-node 已处于维护性更新状态。

基本盘

ts-node:TypeScript 官方编译器 API 的运行时封装,与 tsconfig 深度绑定,默认做类型检查,长期是"Node 跑 TS"的标准答案。

Jiti:UnJS 出品的现代加载器,零配置、双模块格式通吃、磁盘缓存,被 Nuxt/ESLint 等工具链广泛内嵌。

ESM 与模块兼容性

这是两者差距最大的战场:

  • ts-node:ESM 支持长期磕磕绊绊,loader 模式配置繁琐,"type": "module" 项目里踩坑率高;
  • Jiti:ESM 与 CJS 同一入口通吃,import ESM-only 包、require TS 文件都自然工作。

2026 年的 npm 生态 ESM-only 包越来越多,这一项几乎一票否决。

执行方式与性能

  • ts-node:ts-node script.ts 或 node --loader ts-node/esm;类型检查拖慢启动(可用 --transpileOnly 跳过提速,但等于放弃它的核心特性);
  • Jiti:jiti script.ts 或可编程 API;转译结果写磁盘缓存,二次启动毫秒级。

两者开发体验都能用,Jiti 的缓存机制在"频繁重启"场景(脚本工具、配置加载)优势明显。

REPL 与测试集成

  • ts-node 提供交互式 REPL(ts-node 直接进),Jiti 无内置 REPL;
  • 测试框架:Jest 时代 ts-node 生态成熟;Vitest 时代两者都不需要(Vitest 自带 TS)。ts-node + mocha 的组合仍是存量项目的常见配方。

类型检查哲学

  • ts-node:默认每次执行都做完整类型检查——类型错误当场拒绝运行;
  • Jiti:纯转译,类型检查交给编辑器与 CI。

现代共识偏向后者:类型检查是静态分析环节的事,运行时不该为此买单。

决策建议

场景 选择
存量 ts-node 项目,运行正常 不动
新项目需要跑 TS tsx 或 Jiti
需要加载用户 TS 文件的工具链 Jiti
强依赖执行时类型检查的工作流 ts-node --transpileOnly 之外的模式

常见问题(FAQ)

Q:ts-node 是死了吗?

没有死,但活跃度与推荐度明显下降——Node 生态的表演舞台转到了 tsx、Jiti 与 Node 原生 TS 支持。存量项目无需恐慌性迁移,新项目不建议再选。

Q:Jiti 能读 tsconfig 的路径别名吗?

通过配置选项手动映射 alias(不与 tsconfig 自动同步);tsx 则自动读取 tsconfig paths——高频用别名的项目这点 tsx 更省心。

Q:从 ts-node 迁移到 Jiti 的成本?

极小:把启动命令从 ts-node 换成 jiti,删除 ts-node 相关配置即可。类型检查环节如果之前依赖 ts-node 的,补上独立的 tsc --noEmit 步骤。


参考文档

本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台