Node + tsx “__name is not a function” crash
Summary
Running Fased via Node withtsx fails at startup with:
node --import tsx ... developer paths. The same
runtime path works when Fased is built first and launched through the compiled
entrypoint.
This is a developer-runner issue for direct node --import tsx ... paths. It is
not the normal installed Fased runtime path; the supported runner builds with
tsdown when needed and launches fased.mjs. For normal install requirements,
see
Node.js.
Environment
- Node: v25.x (observed on v25.3.0)
- tsx: 4.21.0
- OS: macOS (repro also likely on other platforms that run Node 25)
Repro (Node-only)
Minimal repro in repo
Node version check
- Node 25.3.0: fails
- Node 22.22.0 (Homebrew
node@22): fails - Node 24: needs verification on the local machine where the crash appears
Notes / hypothesis
tsxuses esbuild to transform TS/ESM. esbuild’skeepNamesemits a__namehelper and wraps function definitions with__name(...).- The crash indicates
__nameexists but is not a function at runtime, which implies the helper is missing or overwritten for this module in the Node 25 loader path. - Similar
__namehelper issues have been reported in other esbuild consumers when the helper is missing or rewritten.
Workarounds
-
Use the normal runner scripts instead of direct
node --import tsx: -
Or build first, then run compiled output:
-
Confirmed locally: compiled output plus
node fased.mjs statusworks on Node 25. -
Disable esbuild keepNames in the TS loader if possible (prevents
__namehelper insertion); tsx does not currently expose this. -
Test Node LTS with
tsxto confirm whether the issue is local to a specific Node/loader combination.
References
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Next steps
- Repro on the supported Node LTS line and the newest local Node version.
- Test
tsxnightly or pin to earlier version if a known regression exists. - If reproduces on Node LTS, file a minimal repro upstream with the
__namestack trace.