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

通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:15:05