tsx
TypeScript Execute (tsx): Node.js enhanced with esbuild to run TypeScript & ESM files
Features
- Blazing fast on-demand TypeScript & ESM compilation
- Works in both CommonJS and ESM packages
- Supports next-gen TypeScript extensions (
.cts
& .mts
) - Supports
node:
import prefixes - Hides experimental feature warnings
- TypeScript REPL
- Tested on Linux & Windows with Node.js v12~18
Install
Local installation
If you're using it in an npm project, install it as a development dependency:
npm install --save-dev tsx
You can reference it directly in the package.json#scripts
object:
{
"scripts": {
"dev": "tsx ..."
}
}
To use the binary, you can call it with npx
while in the project directory:
npx tsx ...
Global installation
If you want to use it in any arbitrary project without npx, install it globally:
npm install --global tsx
You can call tsx
directly:
tsx ...
Usage
Run TypeScript / ESM / CJS module
Pass in a file to run:
tsx ./file.ts
Watch mode
Run file and automatically re-run on changes.
All imported files are watched except from the following directories:
node_modules
, bower_components
, vendor
, dist
, and .*
(hidden directories).
Press Return to manually re-run.
tsx watch ./file.ts
REPL
Start a TypeScript REPL by running with no arguments.
tsx
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 the --no-cache
flag to disable the cache:
tsx --no-cache ./file.ts
Node.js Loader
tsx
is a standalone binary designed to be used in-place of node
, but sometimes you'll want to use node
directly. For example, when adding TypeScript & ESM support to npm-installed binaries.
To use tsx with Node.js, pass it into the --loader
flag.
Note: Node.js's experimental feature warnings will not be suppressed when used as a loader
node --loader tsx ./file.ts
NODE_OPTIONS='--loader tsx' node ./file.ts
Tip: In rare circumstances, you might be limited to use the -r, --require
flag.
You can use @esbuild-kit/cjs-loader
but transformations will only be applied to require()
.
Dependencies
FAQ
Does it do type-checking?
No, esbuild does not support type checking.
It's recommended to run TypeScript separately as a command (tsc --noEmit
) or via IDE IntelliSense.
How is tsx
different from ts-node
?
They are both tools to run TypeScript files.
The main difference is that tsx
is powered by esbuild for blazing fast TypeScript compilation. Whereas ts-node
uses the TypeScript compiler, which is not as fast.
Because esbuild doesn't do type checking, tsx
is more equivalent to ts-node --transpileOnly
.
If you migrated from ts-node
, please share your performance gains here!