node.js - Jest løser ikke ESM lokale importer


Jeg har et Typescript-prosjekt med to filer, a.ts og b.ts. Jeg importerer den sistnevnte i a.ts slik:

import * from "./b.js"

Dette fungerer fint. Typescript forstår. Men når jeg kjører Jest (ved bruk av ts-jest), får jeg

Cannot find module './b.js' from 'a.ts'

Hvordan kan jeg få Jest til å forstå at .js-importen fortsatt er en .ts-fil når jeg kjører testen?

Svar #1

Allerede funnet det. Jeg måtte legge til følgende i jest.config.ts

moduleNameMapper: {
   '^(\\.{1,2}/.*)\\.js$': '$1',
},

Den mapper .js-filnavn til en versjon uten filtypeendelse, som Jest (dvs. ts-node under panseret) deretter kan finne.

Merk: å ha preset: 'ts-jest' er også nødvendig, men jeg hadde allerede det fra før.

Svar #2

Det finnes mange grunner til at feilen «cannot find module» kan oppstå i TypeScript:

  1. Pakken er ikke installert.
  2. Noe er galt med node_modules-mappen.
  3. Pakkeimporten inneholder en stavefeil.
  4. Noe er galt med tsconfig.json-filen din.