- Notifications
You must be signed in to change notification settings - Fork70
Runtime TypeScript and ESM support for Node.js
License
unjs/jiti
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is the active development branch. Check outjiti/v1 for legacy v1 docs and code.
Docusaurus,ESLint,FormKit,Histoire,Knip,Nitro,Nuxt,PostCSS loader,Rsbuild,Size Limit,Slidev,Tailwindcss,Tokenami,UnoCSS,WXT,Winglang,Graphql code generator,Lingui,Scaffdog,Storybook,...UnJS ecosystem,...60M+ npm monthly downloads,...6M+ public repositories.
- Seamless TypeScript and ESM syntax support for Node.js
- Seamless interoperability between ESM and CommonJS
- Asynchronous API to replace
import()
- Synchronous API to replace
require()
(deprecated) - Super slim and zero dependency
- Custom resolve aliases
- Smart syntax detection to avoid extra transforms
- Node.js native
require.cache
integration - Filesystem transpile with hard disk caches
- ESM Loader support
- JSX support (opt-in)
Important
To enhance compatibility, jiti>=2.1
enabledinteropDefault
using a new Proxy method. If you migrated to2.0.0
earlier, this might have caused behavior changes. In case of any issues during the upgrade, pleasereport so we can investigate to solve them. 🙏🏼
You can usejiti
CLI to quickly run any script with TypeScript and native ESM support!
npx jiti ./index.ts
Initialize a jiti instance:
// ESMimport{createJiti}from"jiti";constjiti=createJiti(import.meta.url);// CommonJS (deprecated)const{ createJiti}=require("jiti");constjiti=createJiti(__filename);
Import (async) and resolve with ESM compatibility:
// jiti.import(id) is similar to import(id)constmod=awaitjiti.import("./path/to/file.ts");// jiti.esmResolve(id) is similar to import.meta.resolve(id)constresolvedPath=jiti.esmResolve("./src");
If you need the default export of module, you can usejiti.import(id, { default: true })
as shortcut tomod?.default ?? mod
.
// shortcut to mod?.default ?? modconstmodDefault=awaitjiti.import("./path/to/file.ts",{default:true});
CommonJS (sync & deprecated):
// jiti() is similar to require(id)constmod=jiti("./path/to/file.ts");// jiti.resolve() is similar to require.resolve(id)constresolvedPath=jiti.resolve("./src");
You can also pass options as the second argument:
constjiti=createJiti(import.meta.url,{debug:true});
You can globally register jiti usingglobal hooks. (Important: Requires Node.js > 20)
import"jiti/register";
Or:
node --import jiti/register index.ts
You can aliasjiti
tojiti/native
to directly depend on runtime'simport.meta.resolve
and dynamicimport()
support. This allows easing up the ecosystem transition to runtime native support by giving the same API of jiti.
- Type: Boolean
- Default:
false
- Environment variable:
JITI_DEBUG
Enable verbose logging. You can useJITI_DEBUG=1 <your command>
to enable it.
- Type: Boolean | String
- Default:
true
- Environment variable:
JITI_FS_CACHE
Filesystem source cache (enabled by default)
By default (when istrue
), jiti usesnode_modules/.cache/jiti
(if exists) or{TMP_DIR}/jiti
.
Note: It is recommended that this option be enabled for better performance.
- Type: String
- Default:
true
- Environment variable:
JITI_MODULE_CACHE
Runtime module cache (enabled by default).
Disabling allows editing code and importing the same module multiple times.
When enabled, jiti integrates with Node.js native CommonJS cache-store.
- Type: Function
- Default: Babel (lazy loaded)
Transform function. Seesrc/babel for more details
- Type: Boolean
- Default
false
- Environment variable:
JITI_SOURCE_MAPS
Add inline source map to transformed source for better debugging.
- Type: Boolean
- Default:
true
- Environment variable:
JITI_INTEROP_DEFAULT
Jiti combines module exports with thedefault
export using an internal Proxy to improve compatibility with mixed CJS/ESM usage. You can check the current implementationhere.
- Type: Object
- Default: -
- Environment variable:
JITI_ALIAS
You can also pass an object to the environment variable for inline config. Example:JITI_ALIAS='{"~/*": "./src/*"}' jiti ...
.
Custom alias map used to resolve IDs.
- Type: Array
- Default: ['typescript']
- Environment variable:
JITI_NATIVE_MODULES
List of modules (withinnode_modules
) to always use nativerequire()
for them.
- Type: Array
- Default: []
- Environment variable:
JITI_TRANSFORM_MODULES
List of modules (withinnode_modules
) to transform them regardless of syntax.
Parent module'simport.meta
context to use for ESM resolution. (only used forjiti/native
import).
- Type: Boolean
- Default: Enabled if bun is detected
- Environment variable:
JITI_TRY_NATIVE
Try to use native require and import without jiti transformations first.
- Type: Boolean | {options}
- Default:
false
- Environment Variable:
JITI_JSX
Enable JSX support using@babel/plugin-transform-react-jsx
.
Seetest/fixtures/jsx
for framework integration examples.
- Clone this repository
- EnableCorepack using
corepack enable
- Install dependencies using
pnpm install
- Run
pnpm dev
- Run
pnpm jiti ./test/path/to/file.ts
About
Runtime TypeScript and ESM support for Node.js