У меня возникает ошибка SyntaxError: Cannot use import statement outside a module
в моих модульных тестах Jest после переключения одного из пакетов в наших зависимостях. Пакет — это жесткое требование, и мы ничего не можем с ним поделать. Изучив проблему, я пришел к выводу, что это связано с тем, что пакет не отправляет выходные данные cjs, а Jest не может понять синтаксис esm.
Я видел множество обсуждений/решений по этой теме и перепробовал практически все решения, которые смог найти в Интернете. Но, к сожалению, ни один из них мне не помог. Я создал репо как минимальное воспроизведение проблемы. Вот ссылка .
babel-jest
вместе с различными плагинами для работы с js-файлами в стороннем пакете. Пробовал разные форматы конфига (файл js, json, .bablerc)'^.+\\.jsx?$': 'babel-jest', '^.+\\.tsx?$': 'ts-jest'
и все другие возможности, связанные с этим.testPathIgnorePatterns
, transformIgnorePatterns
. Я думал, что это будет решением, но это не так. Может я не правильно делал?useESM
в конфигурацию ts-jestэкспериментальная поддержка esm предоставлена jest, поскольку она экспериментальная и не соответствует нашим требованиям.
Я был бы признателен, если бы вы поигрались с репозиторием репродукции и дали мне несколько советов.
Поскольку вы allowJS
для использования в вашем tsconfig
вы можете изменить шаблон transform
, чтобы разрешить файлы js, и добавить пакет в transformIgnorePatterns
module.exports = {
preset: "ts-jest",
testEnvironment: "jsdom",
globals: {
"ts-test": {
tsConfig: "tsconfig.test.json",
},
},
transform: {
"^.+\\.[jt]s?$": ["ts-jest"],
},
transformIgnorePatterns: ["node_modules/(?!@me/test-package)"],
};
просто попробуйте эту модификацию в вашем package.json
"dependencies": {
//your previous modules
"cross-env": "^7.0.3",
}
"scripts": {
"start": "cross-env NODE_OPTIONS=--max-old-space-size=8096 react-scripts --openssl-legacy-provider start",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8096 react-scripts --openssl-legacy-provider build",
"test": "cross-env NODE_OPTIONS=--max-old-space-size=9096 react-scripts --openssl-legacy-provider test",
"eject": "react-scripts eject"
},
мой работал!