通过mocha.run()运行测试时如何在Mocha中使用ES6模块?
解决方法
命令行传入的-r esm参数本质是预加载esm模块,为Node注入ES模块语法解析能力。你在自定义Mocha运行器中只需提前注入esm的加载钩子即可,无需修改其他逻辑。
具体修改步骤
- 在你的自定义运行器代码的最顶部添加一行代码,注入esm钩子:
require = require('esm')(module)
- 其余原有代码保持不变即可,修改后的代码开头示例:
// 必须放在所有require语句的最前面 require = require('esm')(module) const path = require('path'); const process = require('process'); const Mocha = require('mocha'); const R = require('ramda'); // 后续原有代码完全不需要改动
这个修改会覆盖当前上下文的默认require方法,之后所有加载的文件(包括Mocha自动加载的测试文件、你手动引入的mocha配置文件)都会自动经过esm处理,正常识别import/export语法。
可选替代方案(使用Node原生ES模块支持)
如果你的Node版本 >= 14.13.0,也可以不用esm第三方包,直接启用Node原生ES模块支持:
- 在项目根目录package.json中添加
"type": "module"字段 - 将CommonJS格式的文件后缀改为
.cjs,或ES模块文件后缀改为.mjs - 初始化Mocha时传入对应配置启用原生ESM加载支持即可
内容的提问来源于stack exchange,提问作者Rasmus Puls
相关产品推荐
相关产品推荐

