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

ava转译相对导入文件失败,ES6 import报错:Unexpected token import

解决AVA导入本地模块时的Unexpected token import错误

我来帮你搞定这个问题!你遇到的情况是AVA能正常转译测试文件本身的ES6 import语法,但导入本地模块(比如你的Mongoose User模型)时就触发了语法错误,这大概率是因为babel-register没有覆盖到你导入的这些本地文件,或者配置上有冲突。下面是具体的排查和修复步骤:

1. 让AVA明确接管Babel配置

你的当前配置里只给AVA加了babel-register,但它可能没有把转译规则应用到你导入的本地模块上。建议把Babel配置直接写到AVA的配置项里,确保所有相关文件都能被正确转译:

修改package.json中的AVA配置:

"ava": {
  "require": ["babel-register"],
  "babel": {
    "presets": [["es2015", {"modules": false}]],
    "plugins": ["transform-object-rest-spread", "transform-async-to-generator", "transform-export-extensions"]
  }
}

这样AVA会明确用这个配置去转译测试文件以及它导入的所有本地模块,而不是只依赖根目录的.babelrc(有时候会因为文件位置问题导致读取不到)。

2. 升级Babel预设(推荐)

babel-preset-es2015已经被官方废弃了,换成babel-preset-env能更智能地根据运行环境转译代码,也能更好地兼容AVA:

先安装新的依赖:

npm install --save-dev babel-preset-env

然后更新你的Babel配置(不管是.babelrc还是AVA里的babel字段):

{
  "presets": [["env", {"modules": false}]],
  "plugins": ["transform-object-rest-spread", "transform-async-to-generator", "transform-export-extensions"]
}

3. 检查本地模块的导入路径

有时候省略文件扩展名会导致Node.js无法正确识别并转译模块,试试在导入时加上完整的.js扩展名:

// 之前的写法
// import User from './user.model'
// 修改后
import User from './user.model.js'

4. 确认本地模块本身的语法

如果你的User模型文件里也用了ES6语法(比如import、箭头函数等),那它必须被Babel转译才能在Node环境运行。前面的配置已经覆盖了这一点,但如果模型文件在特殊目录下,你可以在测试文件顶部手动配置babel-register的转译范围:

require('babel-register')({
  // 确保所有本地文件都被转译,排除node_modules(默认就是排除,但可以明确写出来)
  ignore: /node_modules/
})

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

npx ava users.test.js

应该就能解决这个Unexpected token import的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:53:55