运行Mocha时node_modules中私有ES6模块报错的解决咨询
解决Mocha无法转译node_modules中私有Git模块ES6代码的问题
我之前碰到过一模一样的情况,这本质是因为Mocha配合Babel运行时,默认会跳过转译node_modules目录下的文件——你项目内的ES6文件能正常运行,是因为Babel会自动处理项目根目录内的代码,但不会主动处理node_modules里的模块,除非你明确告诉它要这么做。
下面是几种不用修改私有模块代码就能解决的方案:
方法一:修改Babel配置,指定转译你的私有模块
首先推荐把.babelrc换成babel.config.js(因为babel.config.js是项目级全局配置,能覆盖node_modules里的模块,而.babelrc是文件相对路径配置,对node_modules内的模块生效有限),然后添加对私有模块的包含规则:
// babel.config.js module.exports = { presets: ['@babel/preset-env'], env: { test: { include: [ // 替换成你的私有模块名称 './node_modules/your-private-module/**/*' ] } } };
如果一定要保留.babelrc,可以这样配置:
{ "presets": ["@babel/preset-env"], "env": { "test": { // 取消Babel默认忽略node_modules的规则 "ignore": false, // 只包含你的私有模块,避免转译其他第三方库拖慢测试速度 "include": ["node_modules/your-private-module/**"] } } }
方法二:调整Mocha运行命令,确保加载Babel转译
确保你的Mocha命令通过--require @babel/register启用Babel实时转译,比如:
mocha --require @babel/register test/**/*.test.js
如果你的npm scripts里有测试命令,直接修改package.json的scripts字段即可:
{ "scripts": { "test": "mocha --require @babel/register test/**/*.test.js" } }
确认依赖安装完整
最后别忘了确保你已经安装了必要的Babel依赖:
npm install --save-dev @babel/core @babel/preset-env @babel/register mocha
这样配置后,Mocha运行时就会让Babel转译你的私有模块里的ES6代码,不用修改模块本身的代码就能正常执行测试了。
内容的提问来源于stack exchange,提问作者JKB
相关产品推荐
相关产品推荐

