Jiti 入门:零配置的 TypeScript 运行时加载器

Jiti 是 UnJS 团队的 TS 运行时加载器:无需编译直接运行 TS 文件,智能缓存、ESM/CJS 通吃,驱动着 Nuxt、Tailwind 等知名项目。本文讲解用法与配置。

最佳实践
Web 构建模块与工具协作插画

Jiti 让你用 jiti index.ts 或一行 require('jiti')(__filename) 直接运行 TypeScript,零配置同时兼容 ESM 与 CommonJS。它的差异化优势是"嵌入式加载器"定位:作为库被工具链(Nuxt、ESLint 等)集成来加载用户的 TS 配置文件,这是它与 tsx/ts-node 最不同的战场。

Jiti 是什么

月下载 6000 万+,Nuxt、Docusaurus、Tailwind CSS、ESLint 都依赖它——这些工具需要加载用户写的 TypeScript 配置文件(nuxt.config.ts 之类),Jiti 就是幕后功臣。它的设计目标:作为一个可嵌入的加载器,让任何 Node 项目不经编译直接消费 TS。

两种使用方式

npm install jiti
# CLI 方式
npx jiti ./src/index.ts
// 库方式:在你自己的 CLI 工具里加载用户的 TS 配置
const { createJiti } = require('jiti');
const jiti = createJiti(__filename);

const config = jiti('./myapp.config.ts');  // 直接拿到 TS 模块的导出

模块解析的魔法

Jiti 对 ESM/CJS 的处理是"通吃":import TS 文件、require ESM-only 的包、加载 JSON——同一个入口,自动处理模块格式差异。这正是工具链爱它的原因:用户配置文件用什么模块格式都行,加载方不用操心。

配置选项

const jiti = createJiti(__filename, {
  cache: true,                    // 磁盘缓存(默认开,二次加载飞快)
  requireCache: false,            // 不走 Node require 缓存,便于配置热重载
  interopDefault: true,           // 自动解包 ESM default 导出
  alias: { '@': './src' },        // 路径别名,对齐 tsconfig paths
});

缓存是 Jiti 性能的核心:首次转译后写入磁盘缓存,后续加载直接读——这也是它作为配置文件加载器几乎零开销的原因。

与 tsx/ts-node 的定位差异

  • tsx/ts-node:面向"开发期跑应用",强调 watch、REPL、调试器体验;
  • Jiti:面向"在运行时加载 TS 模块",强调可嵌入、零配置、缓存效率。

写应用脚本用 tsx 更顺手;写需要加载用户 TS 文件的工具(脚手架、CLI、框架)用 Jiti 更专业。

常见问题(FAQ)

Q:Jiti 做类型检查吗?

不做(Babel 式类型剥离)。类型正确性由编辑器与 CI 的 tsc --noEmit 保证。

Q:生产环境能用 Jiti 跑整个应用吗?

技术上可以,但定位不建议:生产用预编译产物(SWC/tsc 编译后跑纯 JS)。Jiti 的主场是开发期与工具链内嵌。

Q:Jiti 和 Node 22+ 的原生 TypeScript 支持冲突吗?

Node 原生 TS 支持(类型剥离)在快速演进,Jiti 团队也在适配。Jiti 的差异化仍在:ESM/CJS 互操作、缓存、别名、可编程 API——原生支持不解决这些。


参考文档

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

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台