You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript下Jest导入第三方ESM模块报unexpected token错误如何修复

报错根因

Jest默认跳过node_modules目录下所有文件的转译流程,直接以CommonJS语法执行代码。@my-cool-package/fcm输出的是ESM格式的代码,包含import语法,未经过转译就被Jest加载会直接触发语法错误。
当前配置的核心错误是将需要转译的node_modules包规则写在了testPathIgnorePatterns字段中——该字段仅用于指定哪些路径下的文件不会被识别为测试用例,和模块转译逻辑完全无关,因此配置不生效。

修复方案
  • 删除testPathIgnorePatterns中错误添加的/node_modules/(?!@my-cool-package/)规则
  • 新增transformIgnorePatterns配置项,指定哪些node_modules下的包需要豁免默认忽略规则、交由ts-jest转译
  • 修正transform字段的正则匹配规则,避免漏匹配js/jsx格式文件
修正后的完整配置
module.exports = {
  roots: ['./src'],
  transform: {
    '^.+\\.(ts|tsx|js|jsx)$': 'ts-jest',
  },
  // 配置转译忽略规则:默认忽略所有node_modules文件,放行@my-cool-package、@capacitor开头的依赖
  transformIgnorePatterns: [
    '/node_modules/(?!(@my-cool-package|@capacitor)/)'
  ],
  testPathIgnorePatterns: [
    '/src/context/__mocks__',
  ],
  testRegex: '(/test/.*|\\.(test|spec))\\.(ts|tsx|js)$',
  modulePaths: ['<rootDir>'],
  moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
  moduleNameMapper: {
    '^me/(.*)': '<rootDir>/src/me/$1',
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/assetsTransformer.js',
    '\\.(css|less)$': 'identity-obj-proxy',
    '^@src(.*)$': '<rootDir>/src$1',
  },
}
额外注意事项
  • 如果修改配置后仍出现模块解析报错,检查tsconfig.json中compilerOptions.module字段值,测试环境下建议设置为CommonJS。如果业务代码需要保留ESM配置,可以单独新建测试专用的tsconfig文件,通过ts-jest配置指定加载:
transform: {
  '^.+\\.(ts|tsx|js|jsx)$': ['ts-jest', {
    tsconfig: '<rootDir>/tsconfig.test.json'
  }]
}
  • 后续如果引入其他输出ESM格式的第三方依赖(尤其是capacitor生态的插件),直接将包名追加到transformIgnorePatterns的正则豁免分组中即可。

内容的提问来源于stack exchange,提问作者Sabbir Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:06:19