You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使依赖Babel转换的Node.js可运行Jest测试兼容Bun环境

让Bun Test调用Babel及export-toplevel插件的配置方法

Bun默认不会自动启用Babel转译,所以需要显式配置来让它读取你的babel.config.js并应用指定插件。这里有几个可行的方案:

方案1:使用Bun的--babel命令行参数

最简单的方式是修改package.json里的测试脚本,添加--babel flag,让Bun在运行测试时启用Babel转译:

{
  "scripts": {
    "test": "bun test --babel"
  }
}

这个参数会让Bun自动读取项目根目录下的babel.config.js.babelrc文件,应用你配置的preset和插件,包括export-toplevel——这样你的tokenizer.js里的顶层tokenize函数会被自动导出,测试文件就能正常通过require获取到。

方案2:在Bun配置文件中指定转译器

如果命令行参数不够灵活,你可以在项目根目录创建bunfig.toml(或在package.jsonbun字段里)配置默认启用Babel转译:

bunfig.toml

[test]
# 指定测试时使用Babel作为转译器
transpiler = "babel"

[babel]
# 指向你的Babel配置文件路径
config = "./babel.config.js"

或在package.json中:

{
  "bun": {
    "test": {
      "transpiler": "babel"
    },
    "babel": {
      "config": "./babel.config.js"
    }
  }
}

这种方式会让Bun在所有测试场景下自动应用Babel转译,不需要每次加命令行参数。

方案3:备选(不依赖Babel插件)

如果Bun对export-toplevel插件存在兼容性问题(虽然概率较低),你可以临时在tokenizer.js末尾添加一行显式导出,避免依赖Babel插件:

// 在tokenizer.js最后添加
module.exports = { tokenize };

这是个快速 workaround,不需要修改任何Bun或Babel配置,但会改动原代码——如果你的项目不允许修改原文件,优先用前两个方案。

验证配置是否生效

运行测试前,可以先简单验证转译是否生效:在tokenizer.test.js里添加一行日志:

console.log("Tokenizer exports:", Object.keys(tokenizer));

如果输出包含tokenize,说明Babel的export-toplevel插件已经正常工作了。

内容的提问来源于stack exchange,提问作者FlatAssembler

火山引擎 最新活动