-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ESM mode with ts-node breaks TypeScript path alias resolution in cucumber-js #2403
Comments
+1 Same issue here... |
Thanks @samydoesit for raising, and taking the time to make that repro. I've looked at the config there, but my understanding is that it would not work with or without Cucumber. From the relevant ts-node documentation:
ts-config-paths tends to be used for this, but from what I can see lacks ESM support for now, so unfortunately to have path mapping like this you may need to go back to CommonJS output. |
Thanks for your quick response. :) We will keep the CommonJS output for now. |
To clarify, is there no way to import from the local files when using ts-node/esm? I can't seem to import even if I use a relative path, even if the files are in the same directory, but perhaps that's a different issue. |
For anyone else who finds this issue, my workaround was to use
|
Adding my two cents as I got it to work without ts-node nor tsconfig-paths despite trying everything I could think of. I did try some custom loader scripts that worked but were a bit clunky for my taste and less than ideal from a maintenance standpoint. I came across several others pointing out they replaced their configuration with the tsx package but couldn't get it to work following the documented ESM principles. I wanted to use TypeScript for my step definitions and path aliases within those files, plus include If anyone else is having the same issue, here's what I did to get everything to run successfully:
My
Nit: I declare my step definitions outside of my My tests also had a 4x performance improvement as well, which is always a plus. |
@hynding thank you so much, this fixed my issue |
👓 What did you see?
When using cucumber-js with
ts-node
as the loader in ESM mode, TypeScript path aliases specified intsconfig.json
fail to resolve.Path aliases are not resolved, resulting in module resolution errors when attempting to execute tests.
Error:
Error: Cannot find package '@/index.js' imported from /cucumber-typescript-path-alias-reproduction/features/step_definitions/steps.ts at packageResolve (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:757:9) at moduleResolve (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:798:18) at Object.defaultResolve (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:912:11) at /cucumber-typescript-path-alias-reproduction/node_modules/ts-node/src/esm.ts:218:35 at entrypointFallback (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/src/esm.ts:168:34) at /cucumber-typescript-path-alias-reproduction/node_modules/ts-node/src/esm.ts:217:14 at addShortCircuitFlag (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/src/esm.ts:409:21) at resolve (/cucumber-typescript-path-alias-reproduction/node_modules/ts-node/src/esm.ts:197:12) at nextResolve (node:internal/modules/esm/hooks:865:28) at Hooks.resolve (node:internal/modules/esm/hooks:303:30)
✅ What did you expect to see?
TypeScript path aliases should resolve correctly when cucumber-js is run in ESM mode using
ts-node
.📦 Which tool/library version are you using?
🔬 How could we reproduce it?
Steps to Reproduce
npm install
npm test
📚 Any additional context?
No response
The text was updated successfully, but these errors were encountered: