使用babel-register仍无法在Mocha中导入src目录代码
解决Mocha测试中src目录ES6 import语法报错的问题
我来帮你搞定这个问题!你遇到的核心原因是:babel-register 默认只会转译通过它加载的文件(也就是你的test目录代码),但当测试代码导入src目录的模块时,这些源码文件并没有被babel-register处理,所以Node.js依然识别不了import语法。
下面是两种可行的解决办法:
方法一:在test_helper.js中配置babel-register包含src目录
修改你的./test/test_helper.js,在最顶部添加以下代码,明确告诉babel-register要处理src和test两个目录下的所有文件:
require('babel-register')({ // 忽略node_modules里的文件,避免不必要的转译 ignore: /node_modules/, // 指定需要转译的目录路径 include: [ `${__dirname}/../src/**/*`, `${__dirname}/**/*` ] });
保持原测试脚本不变,重新运行npm test即可。
方法二:调整测试脚本中babel-register的加载顺序
把--require babel-register放到测试脚本的最前面,确保Mocha在加载任何测试文件或源码之前,先启用babel转译功能:
"scripts": { "test": "mocha --require babel-register ./test/**/*.test.js -r ./test/test_helper.js" }
这种方式下,babel-register会自动读取你根目录的.babelrc配置(你的preset-env配置是正确的,针对当前Node.js版本),自动转译src目录的文件。
额外检查点
- 确认你的
.babelrc文件在项目根目录,能被babel-register正确读取; - 可以考虑移除
babel-preset-es2015-rollup以外的旧预设(比如单独的babel-preset-es2015),因为babel-preset-env已经包含了ES2015的转译能力,避免依赖冲突。
其实你的Rollup打包正常已经说明源码语法和babel配置本身没问题,只是测试环境下没让babel覆盖到源码文件而已,按照上面的方法调整后就能解决问题啦!
内容的提问来源于stack exchange,提问作者bvx89
相关产品推荐
相关产品推荐

