Node v12环境下使用esm让Mocha支持ES6模块报错如何解决?
Mocha适配Node12+ ES6模块运行解决方案
你遇到的SyntaxError: Cannot use import statement outside a module报错,确实是因为Node/Mocha默认将.js文件识别为CommonJS模块,未开启ES模块解析能力,可通过以下两种方案解决:
方案1:继续使用esm包适配(无需修改项目模块配置)
你之前配置失效的核心原因是esm需要作为Node进程的预加载模块注入,而非直接作为Mocha的依赖加载,按以下步骤修改即可:
- 确认已安装esm开发依赖:
npm i esm --save-dev
- 修改Mocha启动命令,将
esm提前到Node启动参数中:
NODE_ENV=test node -r esm ./node_modules/.bin/mocha --watch --watch-extensions js,json -t 10000
方案2:使用Node12+原生ES模块支持(更推荐,无额外依赖)
既然你的生产环境已经适配Node12+无需Babel转译,直接用Node原生ES模块支持更轻量:
- 第一步:在项目根目录
package.json中添加配置,声明项目默认使用ES模块规范:
{ "type": "module" }
- 第二步:确认Mocha版本≥7.1.0(低版本不支持原生ES模块解析,版本过低可执行
npm i mocha@latest --save-dev升级) - 第三步:直接使用精简后的Mocha命令即可,无需引入额外加载器:
NODE_ENV=test ./node_modules/.bin/mocha --watch --watch-extensions js,json -t 10000
补充说明
如果项目中存在仍需使用CommonJS规范的文件(如旧配置文件),只需将文件后缀改为.cjs,Node会自动按CommonJS规范解析。
内容的提问来源于stack exchange,提问作者user7996789
相关产品推荐
相关产品推荐

