Ошибка Cannot use import statement outside a module
Есть код:
import openapiTS from 'openapi-typescript';
export const getTypesFromSwagger = async (params: { url: string }) => {
return async () => {
await openapiTS(params.url);
};
};
который при запуске выдает ошибку:
SyntaxError: Cannot use import statement outside a module
но если я в этом же файле сделаю:
import got from "got";
....
то ошибок на импорт нет, пробовал добавлять
"type": "module", но не помогло
tsconfig:
{
"compilerOptions": {
"moduleResolution": "node",
"lib": ["es2017", "dom", "es2018"],
"types": ["node"],
"baseUrl": ".",
"sourceMap": false,
"noImplicitAny": true,
"noImplicitThis": true,
"declaration": true,
"noUnusedParameters": true,
"noUnusedLocals": true,
"emitDecoratorMetadata": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"strictNullChecks": true,
"experimentalDecorators": true,
"importHelpers": true,
"module": "commonjs",
"paths": {
"@zoya/*": ["libs/*"]
},
"target": "ES2016",
"outDir": "../../dist/@zoya/swagger",
},
"include": ["**/*.ts", "**/*.d.ts"],
"exclude": ["node_modules/**", "**/*.spec.ts", "**/jest.config.ts"]
}
node: v16.18.0 проблемный пакет: "openapi-typescript": "5.4.1"
Ответы (1 шт):
На данный момент, как я понял, решения как то настройка конфига, преобразование импорта, нет.
Единственное решение которое я нашел для этого случая — пересобрать модуль openapi-typescript под CommonJs.
Процесс решения:
- склонировал
openapi-typescript - прописал опции компиляции в конфиге для билда:
tsconfig.build.json
{
"extends": "./tsconfig.json",
"exclude": ["scripts", "test", "*.ts"],
"compilerOptions": {
"module": "commonjs"
}
}
- запустил билд:
npm run build - заменил в модуле проекта файлы на файлы из билда (увы и ах)
- запустил тест с указанным кодом - прошел без ошибок.
- билд проекта с указанным кодом тоже прошел без ошибок.
Выводы:
Приведенный выше процесс показал, что проблема заключается именно при работе Jest с ECMAScript модулями ранее приведенная документация Jest, посвященная этой теме, не помогла решить вопрос. Скорее всего по причине того, что решение не касается глубоких импортов.
Если найду решение без пересборки модулей, опубликую здесь же в обновлении.
