Website-Suche

node.js - Module vom Projektstamm importieren (Node 18 + TS + ESM)


Ich versuche, ein Modul aus meinem Node-Projektstamm zu importieren, anstatt einen relativen Pfad zu verwenden.
Ich benutze Node 18, ESM, Typescript und führe es mit ts-node-esm aus.

Code :

// import { number } from './check.js' // works
import { number } from 'check.js' // does not work

console.log(number)

Fehler :

~/Code/ts-esm (main)*$ yarn dev
yarn run v1.22.19
ts-node-esm src/start.ts
/home/rjurado/Code/ts-esm/node_modules/ts-node/src/index.ts:843
    return new TSError(diagnosticText, diagnosticCodes, diagnostics);
           ^
TSError: ⨯ Unable to compile TypeScript:
src/start.ts:2:24 - error TS2307: Cannot find module 'check.js' or its corresponding type declarations.

2 import { number } from 'check.js' // does not work
                         ~~~~~~~~~~

    at createTSError (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/index.ts:843:12)
    at reportTSError (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/index.ts:847:19)
    at getOutput (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/index.ts:1057:36)
    at Object.compile (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/index.ts:1411:41)
    at transformSource (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/esm.ts:400:37)
    at /home/rjurado/Code/ts-esm/node_modules/ts-node/src/esm.ts:278:53
    at async addShortCircuitFlag (/home/rjurado/Code/ts-esm/node_modules/ts-node/src/esm.ts:409:15)
    at async ESMLoader.load (node:internal/modules/esm/loader:431:20)
    at async ESMLoader.moduleProvider (node:internal/modules/esm/loader:350:11)
    at async link (node:internal/modules/esm/module_job:70:21) {
  diagnosticCodes: [ 2307 ]
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Ich habe die Option rootDir zu meiner tsconfig hinzugefügt:

{
  "compilerOptions": {
    "lib": [ "es6", "es2021", "es2022" ],
    "module": "ES2022",
    "target": "ES2021",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "rootDir": "./src",
    "outDir": "dist"
  }
}

Wie kann ich es machen? Ich habe ein minimales reproduzierbares Beispiel erstellt: Repo