Как настроить 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)