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

Jest导入ESModule报错:Cannot use import statement outside a module

解决Jest无法处理ESModule依赖(file-type)的问题

方案1:配置Jest转换规则

Jest默认忽略node_modules内文件的转换,而file-type是纯ESModule,需将其加入转换白名单并通过Babel处理:

  1. 安装依赖:
npm install --save-dev @babel/core @babel/preset-env @babel/preset-typescript babel-jest
  1. 修改jest.config.js:
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  transform: {
    '^.+\\.(ts|tsx)$': 'ts-jest',
    '^.+\\.js$': 'babel-jest',
  },
  transformIgnorePatterns: [
    '/node_modules/(?!file-type)/',
  ],
};
  1. 项目根目录创建.babelrc:
{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    "@babel/preset-typescript"
  ]
}

方案2:改用ESModule兼容的Jest环境

若项目本身采用ESModule配置,可切换至支持ESM的Jest环境:

  1. 安装依赖:
npm install --save-dev jest-environment-node-esm
  1. 修改jest.config.js:
module.exports = {
  preset: 'ts-jest/presets/default-esm',
  testEnvironment: 'node-esm',
  extensionsToTreatAsEsm: ['.ts'],
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1',
  },
};
  1. 确保package.json包含:
{
  "type": "module"
}

方案3:简化版TS-Jest配置

无需额外安装Babel,直接调整Jest与TS-Jest的ESM兼容设置:

在package.json中添加Jest配置:

{
  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node",
    "transformIgnorePatterns": ["node_modules/(?!file-type)"],
    "globals": {
      "ts-jest": {
        "useESM": true
      }
    },
    "moduleNameMapper": {
      "^(\\.{1,2}/.*)\\.js$": "$1"
    }
  }
}

验证

修改配置后重新运行测试:

npm test

若仍有问题,检查tsconfig.json的module字段,确保设置为CommonJS或ESNext,与Jest配置兼容。

内容的提问来源于stack exchange,提问作者Henrique Ramos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:00:54