Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
TypeScript Execute (tsx): Node.js enhanced with esbuild to run TypeScript & ESM files
The tsx npm package is a CLI tool for running TypeScript and TSX files directly without pre-compilation. It's essentially a TypeScript execution and REPL for node.js, similar to how `node` works for JavaScript. It allows developers to quickly run scripts and prototypes written in TypeScript, including support for TSX (TypeScript with JSX syntax), which is commonly used in React development.
Execute TypeScript files directly
Allows you to run a TypeScript file directly from the command line without needing to compile it first. This is particularly useful for quick scripts or during development.
tsx script.ts
REPL mode
Launches a REPL (Read-Eval-Print Loop) where you can type and execute TypeScript code interactively. This is useful for testing small snippets of code quickly.
tsx
Support for TSX
Enables execution of TSX files, which is TypeScript with JSX syntax. This is particularly useful for React developers who want to test components or scripts that include JSX.
tsx component.tsx
ts-node is a very popular package that offers similar functionality to tsx. It provides the ability to execute TypeScript files directly and use TypeScript in a REPL environment. ts-node is widely used in the TypeScript community for development and scripting. Compared to tsx, ts-node has been around longer and has a larger user base, but both aim to simplify the TypeScript development workflow by removing the compilation step.
esbuild-runner offers a way to run TypeScript (and JavaScript) files using the esbuild bundler/compiler. It's focused on providing extremely fast compilation and execution, leveraging esbuild's performance. While esbuild-runner and tsx share the goal of simplifying the execution of TypeScript files, esbuild-runner emphasizes speed and is part of the broader ecosystem around the esbuild project.
TypeScript Execute (
tsx
): Node.js enhanced with esbuild to run TypeScript & ESM files
.cts
& .mts
)node:
import prefixestsconfig.json
paths
Support this project by ⭐️ starring and sharing it. Follow me to see what other cool projects I'm working on! ❤️
tsx
is a CLI command (alternative to node
) for seamlessly running TypeScript & ESM, in both commonjs
& module
package types.
It's powered by esbuild so it's insanely fast.
Want to just run TypeScript code? Try tsx:
npx tsx ./script.ts
How does it compare to ts-node? Checkout the comparison.
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 ...
If you want to use it in any arbitrary project without npx
, install it globally:
npm install --global tsx
Then, you can call tsx
directly:
tsx ...
tsx
is designed to be a drop-in replacement for node
, so you can use it just the way you would use Node.js. All command-line arguments (with the exception of a few) are propagated to Node.js.
Pass in a file to run:
tsx ./file.ts
tsconfig.json
pathBy default, tsconfig.json
will be detected from the current working directory.
To set a custom path, use the --tsconfig
flag:
tsx --tsconfig ./path/to/tsconfig.custom.json ./file.ts
Run file and automatically rerun on changes:
tsx watch ./file.ts
All imported files are watched except from the following directories:
node_modules
, bower_components
, vendor
, dist
, and .*
(hidden directories).
--clear-screen=false
to disable clearing the screen on rerunStart a TypeScript REPL by running with no arguments:
tsx
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
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 to the --loader
flag.
Note: Node.js's experimental feature warnings will not be suppressed when used as a loader.
# As a CLI flag
node --loader tsx ./file.ts
# As an environment variable
NODE_OPTIONS='--loader tsx' node ./file.ts
Tip: In rare circumstances, you might be limited to using the
-r, --require
flag.You can use
@esbuild-kit/cjs-loader
, but transformations will only be applied torequire()
.
@esbuild-kit/esm-loader - Node.js Loader to transform TypeScript to ESM.
@esbuild-kit/cjs-loader - Node.js require()
hook to transform TypeScript & ESM to CommonJS.
tsx
?tsx
stands for "TypeScript execute", similar to npx
("Node.js package execute").
It has an unfortunate overlap with React's TSX/JSX, which stands for "JavaScript XML". However, we believe the naming is appropriate for what it does.
No, esbuild does not support type checking.
It's recommended to run TypeScript separately as a command (tsc --noEmit
) or via IDE IntelliSense.
tsx
different from ts-node
?They're both tools to run TypeScript files. But tsx does a lot more to improve the experience of using Node.js.
tsx just works. It's zero-config and doesn't require tsconfig.json
to get started, making it easy for users that just want to run TypeScript code and not get caught up in the configuration.
It's a single binary with no peer-dependencies (e.g. TypeScript or esbuild), so there is no setup necessary, enabling usage that is elegant and frictionless for first-time users:
npx tsx ./script.ts
tsx is zero-config because it has smart detections built in. As a runtime, it detects what's imported to make many options in tsconfig.json
redundant—which was designed for compiling matching files regardless of whether they're imported.
It seamlessly adapts between CommonJS and ESM package types by detecting how modules are loaded (require()
or import
) to determine how to compile them. It even adds support for require()
ing ESM modules from CommonJS so you don't have to worry about your dependencies as the ecosystem migrates to ESM.
Newer and unsupported syntax & features like importing node:
prefixes are downgraded by detecting the Node.js version. For large TypeScript codebases, it has tsconfig.json paths
aliasing support out of the box.
At the core, tsx is powered by esbuild for blazing fast TypeScript compilation, whereas ts-node
(by default) uses the TypeScript compiler. Because esbuild doesn't type check, tsx
is similar to ts-node --esm --swc
(which uses the SWC compiler).
As a bonus, tsx also comes with a watcher to speed up your development.
Here's an exhaustive technical comparison between tsx
, ts-node
, and other runtimes.
No. tsx uses esbuild's Transform API, which doesn't support plugins.
No. tsx's integration with Node.js is designed to be seamless so there is no configuration.
FAQs
TypeScript Execute (tsx): Node.js enhanced with esbuild to run TypeScript & ESM files
The npm package tsx receives a total of 2,209,325 weekly downloads. As such, tsx popularity was classified as popular.
We found that tsx demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.