Как настроить Typescript StencilJS с Jest для поддержки импорта динамических модулей ES6

Здесь много вопросов Similair (...), но ни один из них не поможет мне получить чистую конфигурацию Stencil . Конфигурационное администрирование должно быть оставлено на Stencil в максимально возможной степени IMO (...)

Компонент My Stencil работает нормально, я пробовал практически все, но Jest spec-test, который нужно импортировать d3-geo меня кидает:

      SyntaxError: Unexpected token 'export'

/app/node_modules/d3-geo/src/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export {default as geoArea} from "./area.js";
                                                                                             ^^^^^^

Что мне не хватает?

Я, вероятно, мог бы использовать Babel, чтобы заставить это работать, но это кажется хакерским. И я не могу представить, что нам действительно нужна предварительная промывка Babel, чтобы получить поддержку модуля ES6.

Особенности приложения:

  • Node@14.16.0 (из docker-image buildkite / puppeteer)
  • Stencil@2.6.0
  • Jest@26.6.3
  • Typescript@4.4.2
  • Модуль, вызывающий ошибку: d3-geo@3.0.1

У меня есть конфигурация шутки в package.json:

      ...
  "type": "module",
  "jest": {
    "testEnvironment": "jest-environment-node",
    "transform": {}
  },
  "main": "dist/index.cjs.js",
  "module": "dist/index.js",
  "es2015": "dist/index.cjs.js",
  "es2020": "dist/index.js",
...
  "scripts": {
    ...
    "test": "stencil test --spec --e2e",
    ...
...

И tsconfig содержит:

      ...
    "moduleResolution": "node",
    "module": "esnext",
    "target": "es2020",
...

2 ответа

Решение, которое сработало для меня, состояло в том, чтобы добавить это вstencil.config.ts:

Вы используетеjest-preprocessorв соответствии с указанными документами , и вы исключаете модули, которые экспортируются как ESM, из шаблона игнорирования, поэтому он делает это и для них (изначально пыталсяbabel-jestиts-jestно у меня были другие проблемы с использованием этих решений).

Вы пытались добавить "esModuleInterop": trueк вашему tsconfig.json? (ссылка на ссылку TSConfig)

Другие вопросы по тегам