配置文件
配置文件类型
Babel 有两种并行的配置文件方式,可以一起使用,也可以单独使用。
History
版本 | 变更 |
---|---|
v7.21.0 | Support .babelrc.cts and babel.config.cts (Experimental) |
v7.8.0 | Support .babelrc.mjs and babel.config.mjs |
v7.7.0 | Support .babelrc.json , .babelrc.cjs , babel.config.json , babel.config.cjs |
- 项目范围的配置
babel.config.*
文件,可用如下不同扩展名:.json
,.js
,.cjs
,.mjs
。
- 相对文件的配置
.babelrc.*
文件,可用如下不同扩展名:.json
,.js
,.cjs
,.mjs
。- 不带扩展名的
.babelrc
。 - 带有
"babel"
属性的package.json
文件。
项目范围的 配置
在 Babel 7.x 新版本中,Babel 有一个 "root" 目录的概念,
默认为当前的工作目录文件夹。
对于项目范围的配置,Babel 将在根目录中自动搜索 "babel.config.json"
文件,
或使用了 支持的扩展名 的等效文件。
另外,用户可以使用显式的 "configFile" 值覆盖默认的配置文件搜索行为。
因为项目范围的配置文件与配置文件的物理位置是分离的,
所以它们非常适合必须广泛应用的配置,
甚至允许插件和预设轻松地应用于 node_modules
或符号链接包中的文件,
这在 Babel 6.x 中通常是很难配置的。
项目范围配置的主要缺点是,因为它依赖于工作目录, 如果工作目录不是单体式仓库的根目录,那么在单体式仓库中使用它会更加痛苦。 有关如何在这种上下文中使用配置文件的示例,请参阅 单体式仓库 文档。
也可以通过将 "configFile" 设置为 false
来禁用项目范围的配置。
相对文件的配置
Babel 从正在编译(受以下警告限制)的 "filename" 开始搜索目录结构来加载 .babelrc.json
文件,
或使用了 支持的扩展名 的等效文件。
这种功能非常强大,
因为它允许你为子 package 创建独立的配置。
相对文件的配置可以设置 merged 使它们特定的配置覆盖项目范围的配置值,
尽管这也可以通过 "overrides" 来实现。
当使用相对文件的配置时,需要考虑一些边缘情况:
- 一旦找到包含
package.json
的目录,搜索就会停止, 因此相对文件的配置仅适用于单个包。 - 正在编译的 "filename" 必须在 "babelrcRoots" packages 中, 否则搜索将被完全跳过。
这些警告意味着:
.babelrc.json
文件仅应用于它们自己包中的文件.babelrc.json
文件将被忽略如果不在 Babel 的 "根" 包中, 除非你选择使用 "babelrcRoots"
有关如何配置具有多个包的单体式仓库的更多讨论,请参阅 单体式仓库 文档。
还可以通过将 "babelrc" 设置为 false
来禁用相对文件的配置。
6.x vs 7.x .babelrc
加载
来自 Babel 6.x 的用户可能会遇到这两个边缘情况,这是 Babel 7.x 中的新功能。 这两项限制是为了解决 Babel 6.x 中常见的 footguns 而增加的:
.babelrc
文件经常出乎意料地应用于node_modules
依赖项。.babelrc
文件 无法 应用于符号链接node_modules
,当人们期望它们表现得像正常的依赖时。.babelrc
文件 在node_modules
依赖关系中将被检测, 即使它们内部的插件和预设通常没有安装, 甚至可能在编译该文件的 Babel 版本中无效。
这些情况主要会给使用单体式仓库结构的用户造成问题, 如果你有
.babelrc
packages/
mod1/
package.json
src/index.js
mod2/
package.json
src/index.js
该配置现在将被完全忽略,因为它跨越了包边界。
一种替代方法是在每个子包中创建一个 .babelrc
,将 "extends" 用作
{ "extends": "../../.babelrc" }
不幸的是,这种方法可能有点重复,根据 Babel 的使用方式, 可能需要设置 "babelrcRoots"。
考虑到这一点,将 .babelrc
重命名为 项目范围的 "babel.config.json"可能更可取。
正如上面在项目范围部分提到的,
这可能需要显式设置 "configFile",
因为如果工作目录不正确,Babel 将找不到配置文件。