Node.js loader for compiling TypeScript modules to ESM
Installations
npm install @esbuild-kit/esm-loader
Developer Guide
Typescript
No
Module System
ESM
Node Version
18.17.1
NPM Version
9.6.7
Releases
Contributors
Unable to fetch Contributors
Languages
TypeScript (100%)
Developer
esbuild-kit
Download Statistics
Total Downloads
50,394,460
Last Day
48,712
Last Week
328,935
Last Month
2,527,921
Last Year
24,669,944
GitHub Statistics
160 Stars
109 Commits
17 Forks
2 Watching
20 Branches
9 Contributors
Bundle Size
156.95 kB
Minified
53.75 kB
Minified + Gzipped
Package Meta Information
Latest Version
2.6.5
Package Id
@esbuild-kit/esm-loader@2.6.5
Unpacked Size
13.05 kB
Size
4.93 kB
File Count
4
NPM Version
9.6.7
Node Version
18.17.1
Publised On
17 Sept 2023
Total Downloads
Cumulative downloads
Total Downloads
50,394,460
Last day
-18.5%
48,712
Compared to previous day
Last week
-47.9%
328,935
Compared to previous week
Last month
4.1%
2,527,921
Compared to previous month
Last year
6.7%
24,669,944
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Dependencies
2
esm-loader
Node.js loader for loading TypeScript files.
Features
- Transforms TypeScript to ESM on demand
- Classic Node.js resolution (extensionless & directory imports)
- Cached for performance boost
- Supports Node.js v12.20.0+
- Handles
node:
import prefixes - Resolves
tsconfig.json
paths
- Named imports from JSON modules
Protip: use with cjs-loader or tsx
esm-loader only transforms ES modules (
.mjs
/.mts
extensions or.js
files inmodule
type packages).To transform CommonJS files (
.cjs
/.cts
extensions or.js
files incommonjs
type packages), use this with cjs-loader.Alternatively, use tsx to handle them both automatically.
Install
1npm install --save-dev @esbuild-kit/esm-loader
Usage
Pass @esbuild-kit/esm-loader
into the --loader
flag.
1node --loader @esbuild-kit/esm-loader ./file.ts
TypeScript configuration
The following properties are used from tsconfig.json
in the working directory:
strict
: Whether to transform to strict modejsx
: Whether to transform JSXWarning: When set to
preserve
, the JSX syntax will remain untransformed. To prevent Node.js from throwing a syntax error, chain another Node.js loader that can transform JSX to JS.jsxFactory
: How to transform JSXjsxFragmentFactory
: How to transform JSX FragmentsjsxImportSource
: Where to import JSX functions fromallowJs
: Whether to apply the tsconfig to JS filespaths
: For resolving aliases
Custom tsconfig.json
path
By default, tsconfig.json
will be detected from the current working directory.
To set a custom path, use the ESBK_TSCONFIG_PATH
environment variable:
1ESBK_TSCONFIG_PATH=./path/to/tsconfig.custom.json node --loader @esbuild-kit/esm-loader ./file.ts
Cache
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:
1ESBK_DISABLE_CACHE=1 node --loader @esbuild-kit/esm-loader ./file.ts
FAQ
Can it import JSON modules?
Yes. This loader transpiles JSON modules so it's also compatible with named imports.
Can it import ESM modules over network?
Node.js has built-in support for network imports behind the --experimental-network-imports
flag.
You can pass it in with esm-loader
:
1node --loader @esbuild-kit/esm-loader --experimental-network-imports ./file.ts
Can it resolve files without an extension?
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.
1import file from './file' // -> ./file.js 2import directory from './directory' // -> ./directory/index.js
Can it use Node.js's CommonJS resolution algorithm?
ESM import resolution expects explicit import paths, whereas CommonJS resolution expects implicit imports (eg. extensionless & directory imports).
As a result of this change, Node.js changes how it imports a path that matches both a file and directory. In ESM, the directory would be imported, but in CJS, the file would be imported.
To use to the CommonJS resolution algorithm, use the --experimental-specifier-resolution=node
flag.
1node --loader @esbuild-kit/esm-loader --experimental-specifier-resolution=node ./file.ts
Related
-
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.
Sponsors
No vulnerabilities found.
No security vulnerabilities found.
Gathering detailed insights and metrics for @esbuild-kit/esm-loader