Skip to content

Commit

Permalink
Replace ts-node with tsx (#1623)
Browse files Browse the repository at this point in the history
Co-authored-by: skuba <[email protected]>
  • Loading branch information
AaronMoat and seek-oss-ci authored Sep 2, 2024
1 parent 48c4208 commit 95b3888
Show file tree
Hide file tree
Showing 12 changed files with 3,273 additions and 2,314 deletions.
14 changes: 14 additions & 0 deletions .changeset/empty-cherries-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
'skuba': major
---

node, start: Replace `ts-node` with `tsx`

`skuba start` and `skuba node` now use `tsx` instead of `ts-node` for running TypeScript files. `tsx` has better ESM interoperability, like support for dynamic imports (`await import()`), than `ts-node`.

There are some downsides for the REPL (which is what `skuba node` without any file is):

- `import` statements in the REPL are not supported; `require` and `await import()` are still supported.
- Pasting code into the REPL may not work as well as `ts-node`. If encountering issues, a workaround could be to use [`.editor`](https://nodejs.org/en/learn/command-line/how-to-use-the-nodejs-repl#dot-commands)

Otherwise, `skuba start` and `skuba node <file>` _should_ work as expected. However, it is difficult to comprehensively test every scenario, so this has been released as a major version. It is recommended to test your use-cases of `skuba start` and `skuba node` after upgrading.
8 changes: 3 additions & 5 deletions docs/cli/run.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ nav_order: 3

---

**skuba** lets you interactively run your TypeScript source code during development.
The following commands are powered by [`ts-node`] and [`ts-node-dev`].
**skuba** lets you interactively run your TypeScript source code during development, powered by [`tsx`].

These commands are only intended to serve local development and simple scripting scenarios,
as a TypeScript process can present substantial overhead at runtime.
Expand All @@ -26,7 +25,7 @@ skuba node src/some-cli-script.ts
# ...
```

or launches a [`ts-node`] REPL if a file is not provided:
or launches a [`tsx`] REPL if a file is not provided:

```shell
skuba node src/some-cli-script.ts
Expand Down Expand Up @@ -217,9 +216,8 @@ Execution should pause on the breakpoint until we hit `F5` or the `▶️` butto
[`skuba build`]: ./build.md
[`skuba-dive/register`]: https://github.com/seek-oss/skuba-dive#register
[`ts-node-dev`]: https://github.com/whitecolor/ts-node-dev
[`ts-node`]: https://github.com/typestrong/ts-node
[`tsconfig-paths`]: https://github.com/dividab/tsconfig-paths
[`tsx`]: https://github.com/privatenumber/tsx
[express]: https://expressjs.com/
[fastify]: https://www.fastify.io/
[http server]: https://nodejs.org/docs/latest-v20.x/api/http.html#class-httpserver
Expand Down
2 changes: 1 addition & 1 deletion docs/deep-dives/esbuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ There are a couple of gotchas when evaluating alternative build tools like esbui

esbuild is not fully compatible with all existing `tsc` configurations,
may lag behind TypeScript in language features,
and lacks rich interoperability with tooling like Jest (via `ts-jest`) and `ts-node`.
and lacks rich interoperability with tooling like Jest (via `ts-jest`).

These issues can be mostly contained within a centralised toolkit like skuba,
but it makes it more difficult to duct tape tools together on an ad-hoc basis,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@
"ts-dedent": "^2.2.0",
"ts-jest": "^29.1.0",
"ts-node": "^10.9.2",
"ts-node-dev": "^2.0.0",
"tsconfig-paths": "^4.0.0",
"tsconfig-seek": "2.0.0",
"tsx": "^4.16.2",
"typescript": "~5.5.0",
"validate-npm-package-name": "^5.0.0",
"zod": "^3.22.4"
Expand Down
Loading

0 comments on commit 95b3888

Please sign in to comment.