ts-node/ts-jest不允许导入

ui7jx7zq  于 9个月前  发布在  Jest
关注(0)|答案(1)|浏览(164)

我在TypeScript项目的Jest测试中集成mdast-util-from-markdown时遇到语法错误。正在寻找避免使用Babel的解决方案。
我的代码使用ts-node运行良好。

问题:

当我运行Jest测试时,我收到以下错误:

Details:

/Users/dudeman/ac/_utils/md-hierarchical-parser/node_modules/mdast-util-from-markdown/index.js:2
export {fromMarkdown} from './lib/index.js'
^^^^^^

SyntaxError: Unexpected token 'export'

> 1 | import { fromMarkdown } from "mdast-util-from-markdown";

字符串

当前设置

配置:

tsconfig.json

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs", // Also tried "esnext"
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": [
    "src/**/*",
    "test/**/*"
  ]
}


jest.config.cjs(也尝试jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  globals: {
    'ts-jest': {
      useESM: true
    }
  },
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  },
  transform: {
    '^.+\\.ts$': 'ts-jest'
  },
  extensionsToTreatAsEsm: ['.ts']
};

Runner

npx jest
NODE_OPTIONS='--loader ts-node/esm' npc jest

试过了

  • 修改我的tslog.json以使用不同的模块设置(例如,“esnext”,“commonjs”)
  • 将jest.js.js修改为
  • 处理ES模块语法,
  • transformIgnorePatterns: ['<rootDir>/node_modules/(?!unist-util-visit)'],
  • 我也使用了babel(尽管我不喜欢),但我仍然得到错误:/

提问:

如何配置Jest和TypeScript以使用mdast-util-from-markdown而不会遇到“Unexpected token”错误,并且最好不要在设置中引入Babel?

编辑:

似乎能和
tsconfig.json

{
  "compilerOptions": {
    "strict": true,
    "target": "ES2022",
    "module": "esnext",
    "moduleResolution": "node",
    "lib": ["esnext"],
    "types": ["node", "jest"],
    "skipLibCheck": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "declaration": true,
    "allowSyntheticDefaultImports": true
  },
  "ts-node": {
    "experimentalSpecifierResolution": "node",
    "transpileOnly": true,
    "esm": true,
  },
  "exclude": ["node_modules", "lib"]
}


jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  transform: {
    '^.+\\.{ts|tsx}?$': ['ts-jest', {
      useESM: true
    }],
  },
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  },
  extensionsToTreatAsEsm: ['.ts']
};


package.json

"type": "module",
  "dependencies": {},
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^6.13.1",
    "@typescript-eslint/parser": "^6.13.1",
    "@types/jest": "29.5.10",
    "eslint": "^8.55.0",
    "jest": "29.7.0",
    "ts-jest": "29.1.1",
    "ts-node": "^10.9.1",
    "typescript": "^5.2.2"
  }


jest --env=node --colors --coverage test

jvidinwx

jvidinwx1#

react-markdown附带了大量的依赖项,你必须通过jest config忽略这些依赖项:

// jest.config.js

const config = {
  transformIgnorePatterns: [
    '[/\\\\]node_modules[/\\\\](?!(bail|ccount|character-entities|comma-separated-tokens|decode-named-*|escape-string-regexp|hast-util-*|is-plain-obj|markdown*|mdast-util-*|micromark*|property-information|react-markdown|remark-*|space-separated-*|trim-lines|trough|unified*|unist-util-*|vfile))',
  ],
};

字符串

相关问题