Package Exports
- jiti
- jiti/package.json
- jiti/register
Readme
jiti
Just-in-Time Typescript and ESM support for Node.js.
[!IMPORTANT] This is the development branch for jiti v2. Check out jiti/v1 for latest stable docs and unjs/jiti#174 for the v2 roadmap.
✅ Features
- Seamless Typescript and ESM syntax support
- Seamless interoperability between ESM and CommonJS
- Synchronous API to replace
require() - Asynchronous API to replace
import() - ESM Loader support
- Super slim and zero dependency
- Smart syntax detection to avoid extra transforms
- Node.js native require cache integration
- Filesystem transpile with hard disk caches
- Custom resolve aliases
🌟 Used by
- Docusaurus
- FormKit
- Histoire
- Knip
- Nitro
- Nuxt
- PostCSS loader
- Rsbuild
- Size Limit
- Slidev
- Tailwindcss
- Tokenami
- UnoCSS
- WXT
- Winglang
- Graphql code generator
- Lingui
- Scaffdog
- ...UnJS ecosystem
- ...58M+ npm monthly downloads
- ...5.5M+ public repositories
- [ pr welcome add yours ]
💡 Usage
CLI
You can use jiti CLI to quickly run any script with Typescript and native ESM support!
npx jiti ./index.ts
# or
jiti ./index.tsProgrammatic
// ESM
import { createJiti } from "jiti";
const jiti = createJiti(import.meta.url);
// CommonJS
const { createJiti } = require("jiti");
const jiti = createJiti(__filename);
// jiti.import() acts like import() with Typescript support
await jiti.import("./path/to/file.ts");
// jiti() acts like require() with Typescript and (non async) ESM support
jiti("./path/to/file.ts");You can also pass options as second argument:
const jiti = createJiti(import.meta.url, { debug: true });Register global ESM loader
You can globally register jiti using global hooks.
Note: This is an experimental approach and only tested to work on Node.js > 20. I don't recommend it and unless you have to, please prefer explicit method.
import "jiti/register";Or:
node --import jiti/register index.ts⚙️ Options
debug
- Type: Boolean
- Default:
false - Environment Variable:
JITI_DEBUG
Enable debug to see which files are transpiled
fsCache
- Type: Boolean | String
- Default:
true - Environment Variable:
JITI_FS_CACHE
Filesystem source cache (enabled by default)
By default (when is true), jiti uses node_modules/.cache/jiti (if exists) or {TMP_DIR}/node-jiti.
Note: It is recommended to keep this option enabled for better performance.
moduleCache
- Type: String
- Default:
true - Environment Variable:
JITI_MODULE_CACHE
Runtime module cache (enabled by default).
Disabling allows editing code and importing same module multiple times.
When enabled, jiti integrates with Node.js native CommonJS cache store.
transform
- Type: Function
- Default: Babel (lazy loaded)
Transform function. See src/babel for more details
sourceMaps
- Type: Boolean
- Default
false - Environment Variable:
JITI_SOURCE_MAPS
Add inline source map to transformed source for better debugging.
interopDefault
- Type: Boolean
- Default:
false
Return the .default export of a module at the top-level.
alias
- Type: Object
- Default: -
- Environment Variable:
JITI_ALIAS
Custom alias map used to resolve ids.
nativeModules
- Type: Array
- Default: ['typescript`]
- Environment Variable:
JITI_NATIVE_MODULES
List of modules (within node_modules) to always use native require for them.
transformModules
- Type: Array
- Default: []
- Environment Variable:
JITI_TRANSFORM_MODULES
List of modules (within node_modules) to transform them regardless of syntax.
experimentalBun
- Type: Boolean
- Default: Enabled if
process.versions.bunexists (Bun runtime) - Environment Variable:
JITI_EXPERIMENTAL_BUN
Enable experimental native Bun support for transformations.
Development
- Clone this repository
- Enable Corepack using
corepack enable - Install dependencies using
pnpm install - Run
pnpm dev - Run
pnpm jiti ./test/path/to/file.ts
License
Published under the MIT license.
Made by @pi0 and community 💛