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

自定义NodeEnvironment时出现Unexpected token import语法错误求助

解决Jest自定义NodeEnvironment时的SyntaxError: Unexpected token import错误

这个问题的核心原因是:Jest加载自定义测试环境文件时,默认使用Node原生的require机制解析,而Node 8.11.1对ES模块(import/export)的支持是实验性的,且Jest不会自动转译自定义环境文件——但你的普通测试文件能正常用ES模块,是因为Jest会用babel或其他转译工具处理它们。

下面给你两个可行的解决方案:

方案一:改用CommonJS语法(最稳妥,适配Node 8)

直接把自定义环境文件里的ES模块语法改成Node 8完全支持的CommonJS语法,这是最快解决问题的方式:

// 替换原来的import语句
const { NodeEnvironment } = require('jest-environment-node');

// 替换原来的export default
module.exports = class CustomIntegrationEnv extends NodeEnvironment {
  constructor(config, context) {
    super(config, context);
    // 你的自定义环境逻辑
  }

  // 其他生命周期方法...
};

方案二:配置Jest+Babel转译自定义环境文件(坚持用ES模块)

如果你想继续用ES模块语法,需要让Jest用Babel转译你的自定义环境文件:

  1. 安装必要的Babel依赖:
yarn add --dev @babel/core @babel/preset-env babel-jest
  1. 在项目根目录创建babel.config.js,配置适配Node 8.11.1的转译规则:
module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: '8.11.1' } }]
  ]
};
  1. 修改jest.config.js,确保自定义环境文件被Babel转译:
module.exports = {
  testEnvironment: './__tests__/_helpers_/environments/integration.js',
  // 让所有.js文件都经过babel-jest转译
  transform: {
    '^.+\\.js$': 'babel-jest'
  },
  // 确保Jest不会忽略你的自定义环境文件所在目录的转译
  transformIgnorePatterns: [
    'node_modules/(?!jest-environment-node)'
  ]
};

注意:Node 8.x的ES模块支持需要额外启用实验性特性(比如--experimental-modules参数),但Jest默认不会添加这个参数,所以方案一的兼容性更好。

内容的提问来源于stack exchange,提问作者Jake Klassen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:12:12