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

如何让依赖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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 10:12:30