Biome

配置 Biome

了解 Biome 配置的工作原理。

本指南将帮助你了解如何配置 Biome。 它解释了 Biome 配置文件的结构,以及 Biome 如何解析其配置。 如果你已经熟悉配置,不妨看看配置参考,其中详细列出了所有可用选项。

Biome 允许你用 CLI 选项或名为 biome.jsonbiome.jsonc 的配置文件来定制其行为。 我们建议你在每个项目中都创建一个配置文件。 这样可确保每位团队成员在 CLI 以及任何支持 Biome 集成的编辑器中拥有相同的配置。 配置文件中的许多选项在 CLI 中同样可用。

配置文件结构

Biome 配置文件名为 biome.jsonbiome.jsonc。它通常 放在项目根目录中,紧邻项目的 package.json

由于 Biome 是一个工具链,它的配置围绕它所提供的工具来组织。目前,Biome 提供 三个工具:格式化器、Linter 和 Assist 辅助操作。这些工具默认全部启用。你可以使用 <tool>.enabled 字段 禁用其中一个或几个:

{
  "$schema": "https://biomejs.dev/schemas/2.4.13/schema.json",
  "formatter": {
    "enabled": false
  },
  "linter": {
    "enabled": false
  },
  "assist": {
    "enabled": false
  }
}

适用于多种语言的选项放在对应的工具字段中。 某个工具的语言专属选项放在 <language>.<tool> 字段下。 这也允许针对某种语言覆盖通用选项。 你还可以根据语言来启用或禁用某个工具。 在下面的示例中,我们为所有语言配置了通用选项 formatter.indentStyleformatter.lineWidth。 同时,我们在 javascript.formatter 中设置了 JavaScript 专属选项 quoteStyle,并覆盖 formatter.lineWidth。 我们还为 JSON 文件禁用了格式化器。

{
  "formatter": {
    "indentStyle": "space", // 默认值为 `tab`
    "lineWidth": 100 // 默认值为 `80`
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single", // 默认值为 `double`
      "lineWidth": 120 // 覆盖 `formatter.lineWidth`
    }
  },
  "json": {
    "formatter": {
      "enabled": false
    }
  }
}

配置文件解析

Biome 支持以下配置文件,按以下顺序:

  1. biome.json
  2. biome.jsonc
  3. .biome.json
  4. .biome.jsonc

Biome 按以下顺序尝试查找配置文件:

  1. 当前工作目录
  • 从 CLI 使用时,工作目录是执行命令所在的位置
  • 从编辑器使用时,工作目录是项目的根目录
  1. 逐级向上的父文件夹
  2. 主目录,它取决于你的操作系统:
  • 在 Linux 上为 $XDG_CONFIG_HOME$HOME/.config/biome
  • 在 macOS 上为 /Users/$USER/Library/Application Support/biome
  • 在 Windows 上为 C:\Users\$USER\AppData\Roaming\biome\config

如果找不到任何配置,则使用 Biome 的默认配置。

举个例子:

  • app/
    • backend/
      • biome.json
      • package.json
    • frontend/
      • legacy/
        • package.json
      • new/
        • package.json
      • biome.json
  • app/backend/package.json 中运行的 Biome 命令会使用配置文件 app/backend/biome.json
  • app/frontend/legacy/package.jsonapp/frontend/new/package.json 中运行的 Biome 命令 会使用配置文件 app/frontend/biome.json

指定要处理的文件

你可以用不同的策略来控制要处理的文件/目录,包括 CLI、配置和 VCS。

通过 CLI 包含文件

控制 Biome 处理哪些文件和目录的第一种方式,是在 CLI 中列出它们。在下面的命令中,我们只格式化 file1.jssrc 文件夹中的所有文件,因为文件夹会被递归遍历。

biome format file1.js src/

通过配置控制文件

Biome 配置文件可用于进一步细化要处理的文件。 你可以使用the files.includes 字段显式列出要处理的文件。 files.includes 接受 glob 模式,例如 src/**/*.js。以 ! 开头的取反模式可用于排除文件。

Biome 配置文件内的路径和 glob 都相对于该配置文件所在的目录解析。例外情况是当 一个配置文件被另一个文件扩展时。

files.includes 适用于 Biome 的所有工具,也就是说,除非另有指定,此处指定的文件 会由 Linter、格式化器和 Assist 辅助操作处理。对于单个工具,你可以使用 <tool>.includes 进一步细化匹配的文件。

通过配置包含文件

看下面的配置,我们只想包含 src/ 文件夹和 test/ 文件夹内的 JavaScript 文件(.js),并忽略文件名中含 .min.js 的文件:

{
  "files": {
    "includes": ["src/**/*.js", "test/**/*.js", "!**/*.min.js"]
  },
  "linter": {
    "includes": ["**", "!test/**"]
  }
}

然后运行以下命令:

biome format test/

该命令会格式化 test/ 文件夹中那些以 .js 结尾、且不以 .min.js 结尾的文件。

src/ 中的文件不会被格式化,因为该文件夹没有列在 CLI 中。

如果运行下面的命令,将没有文件被 Lint,因为 test/ 文件夹中的文件被显式地对 Linter 忽略。

biome lint test/

通过配置排除文件

如果你想让 Biome 不处理某些文件和目录,可以使用 files.includes 配置并采用取反模式:

  • 用开头的单个 ! 让文件被排除在 Lint/格式化之外
  • 用开头的双 !! 让文件被排除在任何与项目相关的操作之外

与项目相关的操作包括:

  • 构建内部模块图,使某些项目规则能够从导入和导出中解析信息。
  • 类型推断,使具备类型感知的 Lint 规则能正确推断类型。

被纳入与项目相关操作考虑范围的文件会被索引

在列出取反 glob 之前,必须先用 ** 模式作为前导

在下面的示例中,我们告诉 Biome 包含所有文件,但:

  • dist/ 文件夹会被排除在任何与项目相关的操作之外,因此不会被索引。
  • 任何以 .generated.js 结尾的文件会被排除在格式化和 Lint 之外,但仍会被索引。
{
  "files": {
    "includes": [
      "**",
      "!**/*.generated.js",
      "!!**/dist"
    ]
  }
}

要了解 Biome 如何与扫描器交互、以及扫描器如何索引你的文件,请查阅相关参考页面

通过 VCS 控制文件

你可以忽略那些被你的 VCS 忽略的文件

知名文件

下面是一些知名文件(well-known files),我们依据其文件名而非扩展名对它们做专门处理。 目前,知名文件仅包括类似 JSON 的文件,但当我们支持新的解析器时,可能会扩展这份列表以纳入其他类型。

以下文件会被解析为 JSON 文件,且 json.parser.allowCommentsjson.parser.allowTrailingCommas 两个选项都设为 false

  • .all-contributorsrc
  • .arcconfig
  • .auto-changelog
  • .bowerrc
  • .c8rc
  • .htmlhintrc
  • .imgbotconfig
  • .jslintrc
  • .nycrc
  • .tern-config
  • .tern-project
  • .vuerc
  • .watchmanconfig
  • mcmod.info

以下文件会被解析为 JSON 文件,其中 json.parser.allowComments 设为 true,但 json.parser.allowTrailingCommas 设为 false。这是因为使用这些文件的工具只能去除注释。

  • .ember-cli
  • .eslintrc.json
  • .jscsrc
  • .jshintrc
  • tslint.json
  • turbo.json

以下文件会被解析为 JSON 文件,其中 json.parser.allowCommentsjson.parser.allowTrailingCommas 都设为 true。这是因为使用这些文件的工具在设计上兼容这样的设置。

  • .babelrc
  • .babelrc.json
  • .devcontainer.json
  • .hintrc
  • .hintrc.json
  • .oxlintrc.json
  • .swcrc
  • api-documenter.json
  • api-extractor.json
  • babel.config.json
  • deno.json
  • devcontainer.json
  • dprint.json
  • jsconfig.json
  • jsr.json
  • language-configuration.json
  • nx.json
  • project.json
  • tsconfig.json
  • typedoc.json
  • typescript.json
  • $PROJECT/.vscode/* 文件夹下以及用户 VS Code 设置文件夹下的所有 .json 文件
  • $PROJECT/.zed/* 文件夹下以及用户 Zed 设置文件夹下的所有 .json 文件
  • $PROJECT/.cursor/* 文件夹下以及用户 Cursor 设置文件夹下的所有 .json 文件