如何让依赖Babel转换的Node.js Jest测试兼容Bun并触发Babel预处理
让Bun测试时使用Babel及export-toplevel插件的解决方案
Bun的测试运行器默认不会自动读取babel.config.js配置,这和Jest的行为不同,所以我们需要显式配置让Bun在测试过程中调用Babel来转换代码。以下是具体的实现步骤:
1. 确认依赖已安装
首先确保你已经安装了所有需要的Babel相关依赖(如果还没装的话):
npm install --save-dev @babel/core @babel/preset-env babel-plugin-rewire export-toplevel
2. 创建Babel转换处理文件
在项目根目录新建一个babel-transformer.js文件,这个文件会告诉Bun如何用你的Babel配置转换代码:
import { transformSync } from "@babel/core"; export default function (code, filename) { // 加载项目根目录的babel.config.js配置 const babelConfig = require("./babel.config.js"); // 执行Babel转换 const transformResult = transformSync(code, { ...babelConfig, filename, sourceMaps: "inline", // 生成内联source map,方便测试调试 }); // 返回转换后的代码,若转换失败则返回原代码 return transformResult?.code || code; }
3. 配置Bun测试使用该转换器
在项目根目录的bunfig.toml(如果没有就新建一个)中添加测试相关的配置,指定使用我们刚才创建的转换器:
[test] # 指定测试时使用的代码转换器 transform = "./babel-transformer.js"
4. 验证配置生效
现在运行bun test,Bun会在处理每个测试相关文件时,先通过Babel按照你的babel.config.js配置进行转换,包括应用export-toplevel插件导出顶层的tokenize函数,这样你的tokenizer.test.js就能通过require正常引入并使用该函数了。
额外注意事项
- 确保你的
export-toplevel插件版本和当前使用的Babel版本兼容,如果出现转换错误,可以检查插件的版本适配性。 - 如果你的项目使用ES模块而非CommonJS,也可以调整转换器中的配置,比如添加
modules: "commonjs"到Babel预设选项中,确保require能正确识别导出内容。
内容的提问来源于stack exchange,提问作者FlatAssembler
相关产品推荐
相关产品推荐

