mocha支持ES6报错

一、package.json
script:
"test": "mocha --require @babel/register",
依赖

"@babel/cli": "^7.12.16",
"@babel/core": "^7.12.16",
"@babel/preset-env": "^7.12.16",
"@babel/register": "^7.12.13",

二、babelrc
{
"presets": [

[
  "@babel/preset-env",
  {
    "modules": false,
    "useBuiltIns": "usage"
  }
]

]
}

三、使用test下文件
import {Iface} from 'src/index.js'

四、报错
import { Iface, Stack } from 'src/index.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module

at wrapSafe (internal/modules/cjs/loader.js:1054:16)
at Module._compile (internal/modules/cjs/loader.js:1102:27)
at Module._compile (/Users/vincent/Demo/data-tools-pro/data-tools/node_modules/pirates/lib/index.js:99:24)

五、其他解决方案
直接使用node的支持方式:
mocha本身不支持ES6语法所以import报错,官网说明如下,https://mochajs.org/#nodejs-n..., 大致意思是直接支持ES6跟着node走,node支持后,mocha不需要进行任何修改,所以实际解决方案:
1、升级node到最新稳定版本
2、配置package.js, 添加 "type": "module",
3、test只需要允许mocha,之前添加的babel删除

不过这个真的不好用,import 的时候必须写全路径加后缀,项目根目录也无法识别,必须各种..到跟,而这些实际项目开发打包的时候都是省略的,所以如果要强行支持这个单元测试,需要追溯修改之前写的代码

阅读 1.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题