Babel 配置文件
Babel 的配置文件用于指定编译选项,包括使用的插件、预设、目标浏览器等。配置文件可以分为项目范围的配置文件和文件相关的配置文件。
1. 配置文件格式
项目范围配置文件
- babel.config.js
- babel.config.json
- babel.config.cjs
- babel.config.mjs
- babel.config.cts
这些配置文件通常放在项目的根目录下,并对整个项目生效。
文件相关配置文件
- .babelrc
- .babelrc.js
- .babelrc.json
- .babelrc.cjs
- .babelrc.mjs
- .babelrc.cts
- package.json 中的
babel
键
这些配置文件对特定的文件或目录及其子目录生效。
2. 结构示例
假设有一个项目结构如下:
/my-project
|-- frontend
| |-- .babelrc.json
| |-- src
|-- backend
| |-- .babelrc.json
| |-- src
|-- babel.config.json
-
babel.config.json
配置如下:{ "presets": [ "@babel/preset-env" ] }
这个配置在整个项目中都会被使用。
-
frontend/.babelrc.json
配置如下:{ "plugins": [ "@babel/plugin-transform-react-jsx" ] }
这个配置只会在
frontend
目录范围内生效。Babel 在编译frontend
目录下的文件时,会自动合并多个配置文件,最终应用@babel/preset-env
和@babel/plugin-transform-react-jsx
。
3. 配置文件选项
Babel 支持多种配置项,官方文档详细列出了所有选项。以下是一些常见的配置项:
插件和预设配置
-
plugins: 配置要使用的插件,值为一个数组,可以配置多个插件。
{ "plugins": [ ["@babel/plugin-transform-arrow-functions", {}] ] }
-
presets: 配置要使用的预设,值为一个数组,可以配置多个预设。
{ "presets": [ "@babel/preset-env" ] }
输出目标选项
-
targets: 指定要兼容的浏览器版本范围。
{ "targets": "> 0.25%, not dead" }
浏览器范围的指定方式有多种,例如在项目根目录下创建
.browserslistrc
文件或在package.json
中通过browserslist
键来指定。优先级顺序如下:targets
.browserslistrc
package.json
-
browserlistConfigFile: 默认值是
true
,表示允许 Babel 去搜寻项目中的.browserslistrc
或package.json
中的browserslist
配置。也可以指定具体的路径。{ "presets": [ [ "@babel/preset-env", { "browserslistConfigFile": "./.browserslistrc" } ] ] }
配置合并选项
-
extends: 扩展其他 Babel 配置文件,可以提供一个路径。
{ "extends": "./base.babelrc.json" }
-
env: 为不同的环境提供不同的配置。
{ "env": { "development": { "plugins": ["pluginA"] }, "production": { "plugins": ["pluginB"] } } }
-
overrides: 对匹配上的特定文件或目录应用不同的配置。
{ "overrides": [ { "test": ["*.ts", "*.tsx"], "exclude": "node_modules", "presets": ["@babel/preset-typescript"] } ] }
-
ignore 和 only: 控制忽略文件和指定特有文件。
{ "ignore": ["node_modules"], "only": ["src"] }
源码映射选项
-
sourceMaps: 是否生成 source map。
{ "sourceMaps": true }
-
sourceFileName: 指定 source map 文件的文件名。
{ "sourceFileName": "customFileName.js" }
-
sourceRoot: source map 文件对应的 URL 前缀。
{ "sourceMaps": true, "sourceRoot": "/root/path/to/source/files/" }
其他选项
-
sourceType: 指定 Babel 如何解析 JS 代码。
"module"
: 如果你的代码使用 ESM 模块化(涉及export
和import
)。"script"
: 普通的 JS 脚本,没有使用模块化。"unambiguous"
: 让 Babel 自己判断,如果代码使用了export
和import
,则视为模块文件,否则视为普通的脚本文件。
-
assumptions: 从 Babel 7.13.0 开始引入的一项配置项,让开发者对自己的代码做一个假定(更像是对 Babel 的一个承诺)。
{ "assumptions": { "noClassCalls": true } }
上面的配置表示代码中不会直接调用类(不会像调用函数一样去调用类),Babel 可以省略生成检查类是否被正确调用的代码。
总结
通过上述配置文件和选项,你可以灵活地控制 Babel 的行为,确保代码在不同环境中都能正常运行。