swc-project / swc-node

Faster ts-node without typecheck
MIT License
1.69k stars 69 forks source link

`package.json` "imports" field support #724

Open MrFoxPro opened 10 months ago

MrFoxPro commented 10 months ago

There is https://nodejs.org/api/packages.html#imports and resolvePackageJsonImports in tsconfig.json. My configuration:

import eql from '#eql'

tsconfig.json:

"compilerOptions": {
  "strict": true,
  "baseUrl": ".",

  "target": "ESNext",
  "module": "NodeNext",
  "moduleResolution": "NodeNext",
  "resolvePackageJsonImports": true,

  "noEmit": true,
  "isolatedModules": true,

  "skipDefaultLibCheck": true,
  "skipLibCheck": true,
},
// ...

package.json:

"type": "module",
"imports": {
  "#eql": "./eql/index.mts"
},
// ...

Running node --loader=@swc-node/register/esm main.ts results in:

node:internal/process/esm_loader:46
      internalBinding('errors').triggerUncaughtException(
                                ^
RangeError [ERR_UNKNOWN_MODULE_FORMAT]: Unknown module format: undefined for URL file:///home/foxpro/craft/sferadel/dev/api/eql/index.mts
    at new NodeError (node:internal/errors:405:5)
    at Object.throwUnknownModuleFormat (node:internal/modules/esm/load:155:9)
    at Hooks.load (node:internal/modules/esm/hooks:417:44)
    at async handleMessage (node:internal/modules/esm/worker:168:18) {
  code: 'ERR_UNKNOWN_MODULE_FORMAT'
}

Node.js v20.5.1

I tried to change to:

"imports": {
  "#eql": "./eql/index.mjs"
},

Then, error is

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/foxpro/craft/sferadel/dev/api/eql/index.mjs' imported from /home/foxpro/craft/sferadel/dev/api/user/user.mts

It's closed circle. Am I doing it in a wrong way?