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
相关产品推荐
相关产品推荐

