babel.config.js是项目级配置文件,适用于整个项目(含node_modules),支持导出对象或函数以实现环境区分与overrides精细控制,优先于.babelrc用于monorepo等复杂场景。

Babel 配置文件 babel.config.js 是项目级配置,适用于整个项目(包括 node_modules 外部依赖的处理),推荐在根目录下使用。它导出一个函数或对象,返回 Babel 的配置项。
基础结构:导出配置对象
最简写法是直接导出一个普通 JavaScript 对象:
module.exports = {
presets: [
'@babel/preset-env',
'@babel/preset-react'
],
plugins: [
'@babel/plugin-transform-runtime'
]
};
这样 Babel 会为所有匹配的文件(默认 .js, .jsx, .ts, .tsx)应用这些预设和插件。
支持环境区分:用函数接收参数
当需要根据开发/生产环境启用不同插件(比如只在开发时加 @babel/plugin-transform-react-jsx-dev),可导出函数:
-
参数
api提供cache、env、caller等方法 -
api.env()返回当前环境名(如"development"或"production") -
api.cache(true)启用缓存(推荐在函数开头调用)
示例:
module.exports = function (api) {
api.cache(true); // 启用缓存提升性能
const isDevelopment = api.env('development');
const presets = ['@babel/preset-env'];
const plugins = ['@babel/plugin-transform-runtime'];
if (isDevelopment) {
plugins.push('@babel/plugin-transform-react-jsx-dev');
}
return { presets, plugins };
};
指定文件范围:用 overrides 精细控制
当不同目录或文件类型需不同配置(如测试文件用 babel-jest 插件,源码用 transform-runtime),可用 overrides:
module.exports = {
presets: ['@babel/preset-env'],
overrides: [
{
test: /\/src\//,
plugins: ['@babel/plugin-transform-runtime']
},
{
test: /\/tests\//,
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: ['@babel/plugin-transform-modules-commonjs']
}
]
};
注意:test 支持正则、字符串或数组,匹配的是文件绝对路径。
与 .babelrc 的区别和选择建议
babel.config.js 是项目级配置,能跨目录生效(包括 node_modules 中被引用的源码),而 .babelrc 是目录级配置,只影响自身及子目录;现代项目(尤其含 Monorepo 或需编译依赖源码)应优先用 babel.config.js。
若项目使用 Webpack/Vite 等构建工具,确保其 Babel 加载器(如 babel-loader)未禁用项目级配置(检查 babelrc: false 是否误设)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











