- Notifications
You must be signed in to change notification settings - Fork89
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.cacheintegration - 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: Boolean
- Default:
false - Environment variable:
JITI_REBUILD_FS_CACHE
Rebuild filesystem source cache created byfsCache.
- 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
Resources
License
Uh oh!
There was an error while loading.Please reload this page.