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

如何从metro-react-native-babel-preset中排除@babel/plugin-transform-regenerator

解决方案

你之前配置的exclude参数不生效,是因为metro-react-native-babel-preset的exclude可过滤列表未包含@babel/plugin-transform-regenerator,该插件是单独做了Hermes判断引入的,不走exclude逻辑,可通过以下方案解决:

  • 方案1:利用预设内置的Hermes开关(最推荐,无侵入)
    你贴出的源码已经做了兼容逻辑:当isHermes为true时会自动跳过@babel/plugin-transform-regenerator的引入,你只需要在预设参数里新增hermes: true配置即可,修改后的配置如下:
const babelOptions = {
  presets: [
    [
      'module:metro-react-native-babel-preset',
      {
        // 开启Hermes开关,自动跳过regenerator插件引入
        hermes: true,
        exclude: ['regenerator-transform']
      }
    ]
  ]
}
module.exports = require('babel-jest').createTransformer(babelOptions);

如果你的项目本身没有开启Hermes、不想改动运行时引擎,可参考下面的其他方案。

  • 方案2:Babel原生禁用预设内置插件
    Babel 7及以上版本支持直接在全局plugins配置中,将需要禁用的插件配置为false,优先级高于预设内的插件引入,直接添加到你的配置中即可:
const babelOptions = {
  presets: [['module:metro-react-native-babel-preset']],
  plugins: [
    // 禁用预设中引入的regenerator插件
    ["@babel/plugin-transform-regenerator", false]
  ]
}
module.exports = require('babel-jest').createTransformer(babelOptions);
  • 方案3:兜底方案,用patch-package修改预设源码
    如果上面两种方案都不生效,可以通过补丁修改node_modules内的预设源码,操作步骤如下:
  1. 安装patch-package:npm i patch-package --save-dev
  2. 打开node_modules/metro-react-native-babel-preset/src/configs/main.js,将regenerator插件对应的引入行修改为:
isHermes ? null : null, // 直接禁用regenerator插件引入
  1. 执行命令生成补丁:npx patch-package metro-react-native-babel-preset
  2. 在package.json的scripts中新增postinstall钩子,后续安装依赖会自动应用补丁:
{
  "scripts": {
    "postinstall": "patch-package"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:24:00