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

Node.js项目Jest测试文件无法使用import/require的问题求助

解决Jest在ES模块项目中识别import的问题

问题重现

项目已配置package.json的"type": "module",运行npm test时,测试文件中使用ES模块import语法报错:

SyntaxError: Cannot use import statement outside a module

有效解决方案

1. 运行Jest时启用ES模块支持

修改package.json中的scripts字段,在test命令中添加--experimental-vm-modules参数:

"scripts": {
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}

注:仅在npm install时添加该参数无效,必须在启动Jest时启用,这是Jest处理ES模块的核心要求。

2. 调整Jest配置适配ES模块

更新package.json中的Jest配置,明确将.js文件视为ES模块,并处理导入路径:

"jest": {
  "testEnvironment": "node",
  "moduleFileExtensions": ["js"],
  "transform": {},
  "extensionsToTreatAsEsm": [".js"],
  "moduleNameMapper": {
    "^(\\.{1,2}/.*)\\.js$": "$1"
  }
}
  • extensionsToTreatAsEsm: 告诉Jest把.js文件当作ES模块解析
  • moduleNameMapper: 解决Jest在ES模块模式下对带.js后缀导入的识别问题

3. 移除冲突的Babel配置

如果之前安装了babel-jest及相关依赖,会和ES模块模式冲突,直接卸载并删除配置文件:

npm uninstall @babel/preset-env @babel/core babel-jest

然后删除项目根目录的babel.config.js文件。

4. 统一使用ES模块导入语法

保持测试文件和源码文件的导入一致,使用标准ES模块写法:

import { emptyChannelSortingQueue } from './channels.js'

避免在ES模块项目中混用require语法。

内容的提问来源于stack exchange,提问作者Alisha Burgfeld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:06:27