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

在Create React App项目中配置Jest使用自定义Babel插件

解决CRA项目中Jest不加载自定义Babel插件(babel-plugin-formatjs)的问题

问题场景

在CRA项目中使用react-intl和babel-plugin-formatjs自动生成翻译消息ID,通过customize-cra在config-overrides.js中配置了自定义Babel插件后,Build流程中插件可正常运行,但执行test命令时,Jest抛出错误[@formatjs/intl] An id must be provided to format a message.,核心原因是Jest未加载该自定义插件。

核心原因

当前config-overrides.js仅修改了Webpack的Babel配置,未同步更新Jest的Babel配置,而CRA默认的Jest配置不会自动继承Webpack的Babel插件规则。

解决方案

方案1:让插件同时作用于Webpack和Jest(推荐)

修改config-overrides.js的导出逻辑,直接用override包裹所有配置项,addBabelPlugin会自动将插件同步应用到Webpack和Jest的Babel配置中:

const { override, addBabelPlugin } = require('customize-cra');

function getMyCustomBabelPlugin() {
  // 提取项目信息并返回插件配置
  return ['babel-plugin-formatjs', { /* 你的自定义配置 */ }];
}

// 直接导出override结果,同时覆盖Webpack和Jest配置
module.exports = override(
  // ...其他Webpack配置项
  addBabelPlugin(getMyCustomBabelPlugin()),
);

方案2:单独为Jest配置Babel插件

如果需要单独控制Jest的配置规则,可以使用overrideJest方法手动添加插件:

const { override, addBabelPlugin, overrideJest } = require('customize-cra');

function getMyCustomBabelPlugin() {
  return ['babel-plugin-formatjs', { /* 你的自定义配置 */ }];
}

module.exports = {
  webpack: override(
    // ...其他Webpack配置项
    addBabelPlugin(getMyCustomBabelPlugin()),
  ),
  jest: overrideJest((jestConfig) => {
    // 找到Jest的Babel转换配置,添加自定义插件
    jestConfig.transform['^.+\\.(js|jsx|ts|tsx)$'].options.plugins.push(getMyCustomBabelPlugin());
    return jestConfig;
  }),
};

注意事项

  • 不要直接依赖根目录的babel.config.js,CRA默认会忽略该文件,除非通过customize-cra强制指定Jest读取它。
  • 确保customize-cra与react-scripts版本兼容,避免版本冲突导致配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:29