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

为何Jest无法处理ES Module依赖?已尝试配置仍报错

解决Jest解析ESM依赖c2pa报错的问题

1. 让Jest转换器覆盖c2pa模块

你已经通过transformIgnorePatterns排除了c2pa,但得确保Jest的transform规则能处理该模块的文件。ts-jest默认只处理TS文件,而c2pa大概率是JS文件,所以需要新增babel-jest来处理JS类型的依赖文件:

修改Jest配置:

module.exports = {
  // ...其他原有配置
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
    '^.+\\.jsx?$': 'babel-jest', // 新增该行,让Babel处理JS文件
  },
  transformIgnorePatterns: ['/node_modules/(?!c2pa)/'],
}

2. 补全Babel配置

仅添加转CommonJS的插件不够,还得让Babel能处理c2pa里的ESNext语法。给babel.config.json加上@babel/preset-env:

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }]
  ],
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

如果c2pa用到了顶层await这类特性,还需要把@babel/plugin-syntax-top-level-await加到test环境的plugins数组中。

3. 确保ts-jest正确读取Babel配置

如果上级目录的babel.config.json没被ts-jest正确识别,可以直接在Jest配置里内联Babel配置:

module.exports = {
  // ...其他配置
  globals: {
    'ts-jest': {
      babelConfig: {
        presets: [["@babel/preset-env", { "targets": { "node": "current" } }]],
        env: {
          test: {
            plugins: ["@babel/plugin-transform-modules-commonjs"]
          }
        }
      }
    }
  }
}

4. 直接mock c2pa模块(兜底方案)

如果以上方法都无效,直接mock整个c2pa模块,避免Jest解析它的ESM代码:
在Jest的moduleNameMapper中新增配置:

moduleNameMapper: {
  // ...原有配置
  '^c2pa$': '<rootDir>/__mocks__/c2pa.js'
}

然后在项目根目录创建__mocks__/c2pa.js,根据你实际用到的c2pa功能编写mock:

// 示例:mock你用到的createSigner方法
module.exports = {
  createSigner: jest.fn(),
  // 按需添加其他你用到的导出项
}

内容的提问来源于stack exchange,提问作者Dave Stein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:20:53