All free skills / Other majors
tsx 4.x
Use tsx v4 as a Node-compatible TypeScript loader, or use its documented ESM/CJS Developer APIs from a plain script. Covers v4 changes, dynamic loading, scoped registration, and the boundary between the API and the tsx CLI.
- For
tsx@4.23.13- Verified
- 2026-09-07, 2 examples executed
- Skill package
@modootoday/pmcp-tsx@4.0.0
Use this skill for free
No PMCP login or subscription is required. Download the original instructions, or install the content-only archive with your project's package manager.
Download SKILL.md · Download package archive
npm install --save-dev https://pmcp.build/skills/tsx/4/package.tgz
PMCP discovers the installed package's instructions. Connect your runtime after installation.
Archive integrity
sha512-S/eS/5xXZvou1LlecIrHVT4cR5MQRI+maugbcGhm6ADbuy78oXRid65bESaB5tWnAZ9S0KrEJXnyIW31l77EXw==Complete instructions
Verified against tsx@4.23.13 on 2026-09-07. 2 of 2 examples executed.
tsx
Scope
This skill targets tsx ^4.0.0. It covers the documented package entry points and Developer APIs, plus the CLI features shown by the research. tsx is a drop-in node replacement that adds TypeScript support, CommonJS/ESM interoperability, tsconfig.json paths, and esbuild-based transformation. It does not perform type checking.
The runnable examples below are standalone Bun scripts. The package-entry, tsImport, and enhanced-require smoke tests were not retained because they failed when run standalone under the supplied Bun environment; see Standalone-runtime limitation.
v4 corrections
- Use the
TSX_environment-variable prefix.ESBK_is the v3-era prefix and is not the v4 prefix. - v4 supports Node.js LTS versions 18 and newer. Do not target Node.js versions below 18.
- v4 added resolver support for
.tsxand.jsx. - CommonJS import specifiers may contain queries.
- Transformation warnings are emitted through stderr.
CLI usage
Install it as a development dependency with npm install -D tsx, then run a TypeScript file with tsx file.ts. The general command shape is:
tsx [tsx flags] ./file.ts [flags & arguments for file.ts]
A package script can use tsx ./file.ts, and npx tsx ./script.ts also works without a local installation.
The equivalent Node integration is node --import tsx ./file.ts.
Package entry points
The package entry point automatically registers TypeScript loading for subsequent imports:
import 'tsx'
const loaded = await import('./file.ts')
For CommonJS-only mode, use require('tsx/cjs'). For module-only mode, use import 'tsx/esm'.
The package entry point is a loader setup, not a value-oriented API. Use it when the surrounding runtime can perform the subsequent TypeScript import. The standalone smoke test from the earlier draft failed under the supplied Bun execution environment with a missing ./cjs/index.cjs module, so this skill does not claim that smoke test is portable to that environment.
Dynamic ESM loading: tsx/esm/api
tsx/esm/api exports named tsImport. It dynamically imports a TypeScript module, with the second argument supplying import context:
import { tsImport } from 'tsx/esm/api'
const loaded = await tsImport('./file.ts', import.meta.url)
The options form accepts parentURL and can select a custom tsconfig:
const loaded = await tsImport('./file.ts', {
parentURL: import.meta.url,
tsconfig: './custom-tsconfig.json'
})
The documented options also include tsconfig: false and an onImport callback receiving the imported file path.
Do not use a built-in module as a portability smoke test for this API. The earlier standalone example calling tsImport('node:path', import.meta.url) failed under the supplied Bun environment because the generated tsx://... module could not be resolved. The research does not establish a standalone Bun-compatible substitute.
Enhanced CommonJS loading: tsx/cjs/api
tsx/cjs/api exports a named enhanced require function. Its documented usage supplies the request and parent path:
import { require } from 'tsx/cjs/api'
const loaded = require('./file.ts', import.meta.url)
The function also exposes .resolve and .cache:
const filepath = require.resolve('./file.ts', import.meta.url)
The earlier standalone example using node:path failed under the supplied Bun environment while invoking the enhanced loader. It is therefore not presented as a runnable standalone example. The documented API remains the relevant shape for a compatible Node/CommonJS integration.
Scoped CJS registration
tsx/cjs/api exports register. It returns an unregister cleanup function, or a scoped API containing require and unregister:
const tsx = require('tsx/cjs/api')
const unregister = tsx.register()
const loaded = require('./file.ts')
unregister()
Use the cleanup function when the registration is no longer needed.
import { register } from 'tsx/cjs/api'
import assert from 'node:assert/strict'
const unregister = register()
assert.equal(typeof unregister, 'function')
unregister()
Scoped ESM registration
tsx/esm/api also exports register. It returns an unregister cleanup function, or a scoped API containing import and unregister:
import { register } from 'tsx/esm/api'
const unregister = register()
await import('./file.ts')
unregister()
import { register } from 'tsx/esm/api'
import assert from 'node:assert/strict'
const unregister = register()
assert.equal(typeof unregister, 'function')
unregister()
CLI-only features
These features are exercised by the tsx command itself rather than by the Developer API:
- Watch mode:
tsx watch ./file.ts - Watch includes:
--include ./other-dep.txtand--include "./other-deps/*" - Watch exclusions:
--exclude "./data/**/*" - Disable watch-screen clearing with
--clear-screen=false - The TypeScript REPL, entered by running
tsxwith no script - Node's enhanced test runner, invoked with
tsx --test
Watch mode reruns when dependencies change. The Developer API does not provide watch mode or the REPL. describe, it, and expect are not available in a directly executed script; test files use the tool's test-runner integration instead.
Standalone-runtime limitation
In the supplied standalone Bun execution, these documented loading operations did not produce runnable examples:
- importing the package entry point failed with a missing
./cjs/index.cjsmodule; tsImportfailed while resolving its generatedtsx://...module;- enhanced
requirefailed while loading the built-in-module smoke test.
Those failures are runtime-specific observations from the required standalone execution, not evidence that the documented Node integration shapes should be changed. Registration itself was independently runnable, so those examples are retained.
Does not cover
This skill does not cover the full CLI flag set, watch-mode dependency semantics beyond the documented include/exclude options, REPL behavior, tsx --test test discovery, TypeScript compiler type checking, undocumented loader internals, Bun-specific compatibility beyond the observed standalone failures, or configuration details not shown in the supplied research.