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


Jeg har et Typescript-projekt med to filer, a.ts og b.ts. Jeg importerer den sidstnævnte i a.ts sådan her

import * from "./b.js"

Dette fungerer fint. Typescript forstår det. Men når jeg kører Jest (ved brug af ts-jest), får jeg

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

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

Svar #1

Har allerede fundet det. Jeg måtte tilføje følgende til jest.config.ts

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

Den kortlægger .js-filnavne til en version uden filendelse, som Jest (dvs. ts-node under motorhjelmen) så kan finde.

Bemærk: at have preset: 'ts-jest' er også nødvendigt, men det havde jeg allerede før.

Svar #2

Der er mange grunde til, at fejlen "kan ikke finde modul" kan opstå i TypeScript:

  1. Pakken er ikke installeret.
  2. Der er noget galt med node_modules-mappen.
  3. Pakkeimporten indeholder en stavefejl.
  4. Der er noget galt med din tsconfig.json-fil.