Readit News logoReadit News
Normal_gaussian · 5 months ago
Whilst I use an esbuild based build pipeline to produce production artifacts, I've found that the combination of native type transformation and node:test improvements is now sufficient to do away with most test frameworks.

My nodejs projects have tests that run faster and have fewer breaking dependencies.

The two things I have to do are to always annotate type imports with type (I have a script for that), and to use file extensions on imports.

dimava · 5 months ago
There's an ESLint rule with autofixes for that (annotating type imports) One for extension should exist somewhere too
jadbox · 5 months ago
This is great to finally see get added. I wonder why they decided to build their own type stripper instead of just bundling tsc/swc. It feels like Node.js is going to be plagued with bugs whenever TypeScript adds new type constructs, which may take months to get patched.
Eric_WVGG · 5 months ago
Would it be possible for the maintainers of Typescript to provide an official stripper that could be deployed alongside new versions of Typescript, and then snapped in?
yladiz · 5 months ago
I'm not certain but I would be surprised if the TS and Node devs didn't discuss the functionality that's in Node now, since TS must have some definition of what an erasable type is (or rather, what few features aren't erasable, like enums), since the corresponding --erasableSyntaxOnly flag in TS was probably made specifically because of Node.
mosdl · 5 months ago
Its just stripping types, so new constructs should not matter - there is no parsing.
eyelidlessness · 5 months ago
It uses swc under the hood.
steve_adams_86 · 5 months ago
I don't mean this rhetorically, but what are the benefits of using node over something like deno now? It has been so long since I lived in the node ecosystem. I imagine it has gotten quite a bit better. Is the main benefit just ecosystem/compatibility stuff? Deno sometimes has some odd compatibility issues, but not often. The low-overhead, sane defaults, just-build kind of nature of it has become very appealing to me. Being able to build CLIs in portable binaries using a language my coworkers understand is really nice (despite that they're like 60mb, haha). I prefer Go personally, but ultimately prefer being able to collaborate.
tombl · 5 months ago
It's funny, I would actually argue the opposite point. When Deno and Bun first came out, they promised a hard break from the Node ecosystem, like how Deno leaned heavily into browser compatibility, and Bun into framework features like Bun.App.

At some point they both decided that Node compatibility was more important than their unique features, but in the time since their release Node got type stripping, require(esm), sqlite, single executable apps, a permission system, a test runner, and basically ever other Deno/Bun feature they could port over.

So at this point why use runtimes that imitate Node when you could just use Node? You'll get most of the modern niceties, but also get 100% compatibility with the existing ecosystem.

hu3 · 5 months ago
> When Deno and Bun first came out, they promised a hard break from the Node ecosystem

I don't think that's true for Bun. In fact Bun was planned to NOT break from Node ecosystem as much as possible:

"Bun is designed as a drop-in replacement for your current JavaScript & TypeScript apps or scripts — on your local computer, server or on the edge. Bun natively implements hundreds of Node.js and Web APIs, including ~90% of Node-API functions (native modules), fs, path, Buffer and more." - 2022

https://archive.is/lWjNn#selection-399.0-403.55

evanwpm · 5 months ago
It sounds like Bun and Deno might have been a huge success! Could have had the effect of lighting a fire under node to innovate
reactordev · 5 months ago
It’s purely ecosystem at this point. Deno, Bun, any runtime is more modern. It’s nice they are catching up but by the time typescript is a native citizen in node, others may take the crown. The codebase is ooof.

That said, there’s something to be said about being the first mover and having the ecosystem so node isn’t going away anytime soon, nor is the npm/npx ecosystem.

Go has the ability to, with a goja fork [1], to execute ESM but you would still need to transpile using another go tool to run it. I have such a runtime but it’s nowhere near as fast as bun or deno. I use it mainly so I can have agents do my local bidding.

[1] https://github.com/grafana/sobek

leptons · 5 months ago
>It’s purely ecosystem at this point.

Definitely not just about ecosystem.

When AWS Lambda supports Deno, then maybe someday further down the line, I might think about trying it once for something unimportant. If that goes well, then we'll see.

yencabulator · 5 months ago
So if you use this, what do you use to enforce the types? Are you still running tsc --noEmit?

I'm embarking on a project where the various tsconfig files are getting quite unwieldy. I'd have already jumped to Deno but it just won't work right when the actual deployment is to Cloudflare Workers.

gabrielsroka · 5 months ago
butz · 5 months ago
Does this mean we can finally drop `typescript` dependency from build chain?
vivzkestrel · 5 months ago
Wake me up when it gets as good as running tsx aka support for path aliases in dev and test environments and support for watch mode