Шутка с модулями TypeScript и ES не может импортировать «именованный импорт» из модулей commonjs

#typescript #jestjs #es6-modules #ts-jest #babel-jest

Вопрос:

Используя TS, экспорт из модулей CJS может быть импортирован с синтаксисом, как если бы они назывались экспортом модулей ES, например:

 import { sync } from 'glob';
 

Однако в модулях Jest и ES, когда этот стиль импорта находится в тестовом файле или в зависимости от тестового файла, он говорит SyntaxError: The requested module 'glob' does not provide an export named 'sync' .

Просмотр всех по одному и изменение их на import glob from 'glob'; , а затем вызов glob.sync() , кажется, работает, однако при переносе некоторых устаревших материалов с другого тестового запуска в шутку это может быть не вариант, потому что в кодовой базе много таких импортных файлов.

Воспроизведено здесь: https://github.com/themaskedavenger/tsjestcjerepro

Запуск шутки с: node --experimental-vm-modules node_modules/jest/bin/jest.js (как описано в https://jestjs.io/docs/ecmascript-modules), и используя конфигурацию Jest:

   resetMocks: true,
  testEnvironment: "node",
  testMatch: [
    "**/src/**/*.(spec|test).[tj]s?(x)"
  ],
  preset: 'ts-jest/presets/default-esm',
  transform: {},
  'extensionsToTreatAsEsm': [".ts", ".tsx"],
  globals: {
    'ts-jest': {
      useESM: true,
      tsconfig: {
        allowSyntheticDefaultImports: true,
        declaration: true,
        esModuleInterop: true,
        jsx: "react",
        lib: ["esnext"],
        module: "es2020",
        moduleResolution: "node",
        outDir: "build",
        sourceMap: true,
        strictNullChecks: true,
        target: "ES2020",
      }
    },
  }
 

Есть ли способ обойти это, чтобы import { whatever } from 'whatever' ; работало для модулей CJS в тестовых файлах jest?

Комментарии:

1. вы когда-нибудь находили решение для этого?