-
-
Notifications
You must be signed in to change notification settings - Fork 33.8k
Description
Version
20.1.0
Platform
Darwin Tomass-MBP-2.netis.cc 22.4.0 Darwin Kernel Version 22.4.0: Mon Mar 6 21:00:17 PST 2023; root:xnu-8796.101.5~3/RELEASE_X86_64 x86_64
Subsystem
node --loader
What steps will reproduce the bug?
Follow the steps in my repro here: https://github.com/TomasHubelbauer/node-esm-loader-repro
Copied here for posterity.
Node 20:
nvm install 20to install Node 20node --versionto ensure Node version (I get 20.1.0)npm installto install dependenciesnpm run testto run thehealth.test.tsscript
Notice the test fails and Fastify's autoload is seemingly not aware of the
--loader option and attempts to load routes/health.ts without TypeScript to
JavaScript conversion via ts-node/esm.
npm run test
> repro@0.0.0 test
> node --loader=ts-node/esm --experimental-specifier-resolution=node --test health.test.ts
ℹ (node:95105) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time
ℹ (Use `node --trace-warnings ...` to show where the warning was created)
✖ should be alive (32.750836ms)
Error: "@fastify/autoload cannot import plugin at '/routes/health.ts'. To fix this error compile TypeScript to JavaScript or use 'ts-node' to run your app."
at findPlugins (/node_modules/@fastify/autoload/index.js:224:15)
at async autoload (/node-esm-loader-repro/node_modules/@fastify/autoload/index.js:35:22)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2208.335483
✖ failing tests:
✖ should be alive (32.750836ms)
Error: "@fastify/autoload cannot import plugin at 'routes/health.ts'. To fix this error compile TypeScript to JavaScript or use 'ts-node' to run your app."
at findPlugins (/node_modules/@fastify/autoload/index.js:224:15)
at async autoload (/node_modules/@fastify/autoload/index.js:35:22)
Node 19:
nvm install 19to install Node 20node --versionto ensure Node version (I get 19.9.0)npm installto install dependenciesnpm run testto run thehealth.test.tsscript
Notice the test passes and Fastify's autoload is inherit the --loader option
and uses the ts-node/esm loader successfully to auto-load routes/health.ts.
npm run test
> repro@0.0.0 test
> node --loader=ts-node/esm --experimental-specifier-resolution=node --test health.test.ts
ℹ (node:95453) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time
ℹ (Use `node --trace-warnings ...` to show where the warning was created)
✔ should be alive (472.711395ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2679.742161
How often does it reproduce? Is there a required condition?
Node 20: every time
Node 10: never
What is the expected behavior? Why is that the expected behavior?
Follow Node 19's behavior of using --loader to transpile TypeScript to JavaScript on the fly using ts-node/esm.
What do you see instead?
An error that is the result of the loader not being applied.
Additional information
No response