What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Node.js 23 made it easier to bridge CommonJS and ES modules, run package scripts directly, and match coverage files with globs. The headline change, require(esm), had an important limit: in Node 23.0.0 it was experimental and could load only a synchronous ES module graph. These changes arrived across several releases, and some were also available in Node 22.
What Node.js 23.0.0 added
Released on October 16, 2024, Node.js 23.0.0 highlighted three changes: enabling require(esm) by default, stabilizing node --run, and adding glob pattern support for test coverage files. The release announcement describes the version as Current. Node.js 23.0.0 release announcement
As an Amazon Associate I earn from qualifying purchases.
Loading ES modules with require()
CommonJS code could use require() to load a native ES module, provided the module and its dependencies formed a synchronous graph. The result was an ES module namespace object. If any module in the graph used top-level await, loading could fail with ERR_REQUIRE_ASYNC_MODULE.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →“Enabled by default” did not mean “fully stable”: the Node.js project still classified the feature as experimental in 23.0.0 and asked users for feedback. Compatible packages could check process.features.require_module. The release notes also describe the "module-sync" exports condition for directing compatible require() and import consumers to an appropriate entry point. See the 23.0.0 release notes for the release-specific details.
#1 Best Overall
Running package scripts with node --run
Node 23.0.0 marked node --run stable. It lets you run a script declared in package.json from the Node executable. The documented change concerns script execution; it does not make Node a replacement for a package manager’s dependency-installation functions.
Coverage-file glob patterns
The built-in test runner gained glob pattern support for coverage files. This makes it possible to match multiple coverage files using patterns, rather than treating the change as a general overhaul of how the test runner selects tests.
Rank #2
Can you require an ES module in Node.js?
In Node 23.0.0, yes, when the ES module graph can be evaluated synchronously. A module graph that includes top-level await falls outside that boundary and can trigger ERR_REQUIRE_ASYNC_MODULE. The feature was experimental in that release, so projects relying on it needed to account for that status as well as the asynchronous-module limitation. Node.js 23.0.0 release announcement
Was require(esm) exclusive to Node 23?
No. Node.js 22.12.0, released on November 21, 2024, also enabled require(esm) by default. The behavior therefore was not exclusive to the Node 23 line. The release notes identify Node 22.12.0 as an LTS release. Node.js 22.12.0 release announcement
Rank #3
| Release | What the cited release established |
|---|---|
| Node.js 23.0.0, October 16, 2024 | require(esm) enabled by default but experimental; stable node --run; coverage-file glob support. Release notes |
| Node.js 22.12.0, November 21, 2024 | require(esm) enabled by default in the Node 22 line. Release notes |
Can Node run TypeScript files without a build step?
Node.js 23.6.0 enabled --experimental-strip-types by default, allowing Node to execute .ts files that use syntax within the feature’s supported subset. The release, published January 7, 2025, still described type stripping as experimental and documented limitations. It removes supported type syntax for execution; it is not a full TypeScript compilation pipeline and does not perform type checking. Node.js 23.6.0 release announcement
Why the “Node strikes back” framing fits
Bytes issue 341, published November 14, 2024, presented Node 23 as a response to developer-facing capabilities associated with newer runtimes, emphasizing module interoperability and a smoother scripting experience. The release details make the story more specific than a claim that Node copied every rival feature or ended the CommonJS-to-ESM transition: the changes had defined limits, some were experimental, and require(esm) also reached Node 22.12.0. Bytes #341 — Node strikes back
Quick Recap
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




