Node.js import
hook to instantaneously transform TypeScript to ESM on demand using esbuild.
- Transforms TypeScript to ESM on demand
- Supports TS extensions
.cjs
&.mjs
(.cts
&.mts
) - Classic Node.js resolution (extensionless & directory imports)
- Cached for performance boost
- Supports Node.js v12.20.0+
- Handles
node:
import prefixes
Tip:
esm-loader doesn't hook into
require()
calls.Use this with cjs-loader for
require()
support. Alternatively, use tsx to handle them both automatically.
npm install --save-dev @esbuild-kit/esm-loader
Pass @esbuild/esm-loader
into the --loader
flag.
node --loader @esbuild/esm-loader ./file.ts
The following properties are used from tsconfig.json
in the working directory:
jsxFactory
jsxFragmentFactory
Modules transformations are cached in the system cache directory (TMPDIR
). Transforms are cached by content hash so duplicate dependencies are not re-transformed.
Set environment variable ESBK_DISABLE_CACHE
to a truthy value to disable the cache:
ESBK_DISABLE_CACHE=1 node --loader @esbuild/esm-loader ./file.ts
Yes. This loader enables importing native JSON modules.
Node.js has built-in support for network imports behind the --experimental-network-imports
flag.
You can pass it in with esm-loader
:
node --loader @esbuild/esm-loader --experimental-network-imports ./file.ts
In ESM, import paths must be explicit (must include file name and extension).
For backwards compatibility, this loader adds support for classic Node resolution for extensions: .js
, .json
, .ts
, .tsx
, .jsx
. Resolving a index
file by the directory name works too.
import file from './file' // -> ./file.js
import directory from './directory' // -> ./directory/index.js
-
tsx - Node.js runtime powered by esbuild using
@esbuild-kit/cjs-loader
and@esbuild-kit/esm-loader
. -
@esbuild-kit/cjs-loader - TypeScript & ESM to CJS transpiler using the Node.js loader API.