jiti
为Node.js提供即时Typescript和ESM支持。
[!重要] 这是jiti v2的开发分支。查看jiti/v1获取最新稳定版文档,以及unjs/jiti#174了解v2路线图。
✅ 特性
- 无缝支持Typescript和ESM语法
- ESM和CommonJS之间无缝互操作
- 同步API替代
require()
- 异步API替代
import()
- 支持ESM加载器
- 超轻量且零依赖
- 智能语法检测以避免额外转换
- 集成Node.js原生require缓存
- 文件系统转译并使用硬盘缓存
- 自定义解析别名
🌟 使用者
- Docusaurus
- FormKit
- Histoire
- Knip
- Nitro
- Nuxt
- PostCSS loader
- Rsbuild
- Size Limit
- Slidev
- Tailwindcss
- Tokenami
- UnoCSS
- WXT
- Winglang
- Graphql code generator
- Lingui
- Scaffdog
- ...UnJS生态系统
- ...每月5800万+ npm下载量
- ...550万+ 公共仓库
- [ 欢迎提交PR添加您的项目 ]
💡 使用方法
命令行
您可以使用jiti
CLI快速运行任何带有Typescript和原生ESM支持的脚本!
npx jiti ./index.ts
# 或
jiti ./index.ts
编程方式
// --- 初始化 ---
// ESM
import { createJiti } from "jiti";
const jiti = createJiti(import.meta.url);
// CommonJS
const { createJiti } = require("jiti");
const jiti = createJiti(__filename);
// --- ESM兼容API ---
// jiti.import()类似于import(),但支持Typescript
await jiti.import("./path/to/file.ts");
// jiti.esmResolve()类似于import.meta.resolve(),但有额外功能
const resolvedPath = jiti.esmResolve("./src");
// --- CJS兼容API ---
// jiti()类似于require(),但支持Typescript和(非异步)ESM
jiti("./path/to/file.ts");
// jiti.resolve()类似于require.resolve(),但有额外功能
const resolvedPath = jiti.resolve("./src");
您也可以将选项作为第二个参数传递:
const jiti = createJiti(import.meta.url, { debug: true });
注册全局ESM加载器
您可以使用全局钩子全局注册jiti。
注意: 这是一种实验性方法,仅在Node.js > 20上测试通过。除非必要,否则我不推荐使用它,请优先选择显式方法。
import "jiti/register";
或:
node --import jiti/register index.ts
⚙️ 选项
debug
- 类型:Boolean
- 默认值:
false
- 环境变量:
JITI_DEBUG
启用详细日志记录。您可以使用JITI_DEBUG=1 <您的命令>
来启用它。
fsCache
- 类型:Boolean | String
- 默认值:
true
- 环境变量:
JITI_FS_CACHE
文件系统源缓存(默认启用)
默认情况下(当为true
时),jiti使用node_modules/.cache/jiti
(如果存在)或{TMP_DIR}/jiti
。
注意: 建议保持此选项启用以获得更好的性能。
moduleCache
- 类型:String
- 默认值:
true
- 环境变量:
JITI_MODULE_CACHE
运行时模块缓存(默认启用)。
禁用允许编辑代码并多次导入同一模块。
启用时,jiti与Node.js原生CommonJS缓存存储集成。
transform
- 类型:Function
- 默认值:Babel(懒加载)
转换函数。更多详情请参见src/babel。
sourceMaps
- 类型:Boolean
- 默认值:
false
- 环境变量:
JITI_SOURCE_MAPS
为转换后的源代码添加内联源映射,以便更好地调试。
interopDefault
- 类型:Boolean
- 默认值:
false
- 环境变量:
JITI_INTEROP_DEFAULT
在顶层返回模块的.default
导出。
alias
- 类型:Object
- 默认值:-
- 环境变量:
JITI_ALIAS
用于解析ID的自定义别名映射。
nativeModules
- 类型:Array
- 默认值:['typescript']
- 环境变量:
JITI_NATIVE_MODULES
始终使用原生require的模块列表(位于node_modules
中)。
transformModules
- 类型:Array
- 默认值:[]
- 环境变量:
JITI_TRANSFORM_MODULES
无论语法如何都要转换的模块列表(位于node_modules
中)。
experimentalBun
- 类型:Boolean
- 默认值:如果存在
process.versions.bun
(Bun运行时)则启用 - 环境变量:
JITI_EXPERIMENTAL_BUN
启用实验性的原生Bun支持进行转换。
开发
- 克隆此仓库
- 使用
corepack enable
启用Corepack - 使用
pnpm install
安装依赖 - 运行
pnpm dev
- 运行
pnpm jiti ./test/path/to/file.ts