node.js - Jest löser inte ESM lokala importeringar


Jag har ett Typescript-projekt med två filer, a.ts och b.ts. Jag importerar den sistnämnda i a.ts så här

import * from "./b.js"

Detta fungerar bra. Typescript förstår. Men när jag kör Jest (med ts-jest) får jag

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

Hur kan jag få Jest att förstå att .js-importen fortfarande är en .ts-fil när jag kör testet?

Svar #1

Hittade det redan. Jag var tvungen att lägga till följande i jest.config.ts

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

Den kopplar .js-filnamn till en version utan filändelse, som Jest (dvs. ts-node under huven) sedan kan hitta.

Obs: att ha preset: 'ts-jest' är också nödvändigt, men det hade jag redan innan.

Svar #2

Det finns många anledningar till varför felet "kan inte hitta modul" kan uppstå i TypeScript:

  1. Paketet är inte installerat.
  2. Något är fel med mappen node_modules.
  3. Paketimporten innehåller ett stavfel.
  4. Det är något fel på din tsconfig.json-fil.