跳转到内容

Biome v2——代号:Biotype

项目品牌图,内容为"Biome, toolchain of the web" 项目品牌图,内容为"Biome, toolchain of the web"

我们很高兴地宣布,Biome v2 正式发布!🍾 Biome v2——代号:Biotype,是首个无需依赖 TypeScript 编译器即可实现类型感知规则的 JavaScript 和 TypeScript Linter!这意味着你可以在不安装 typescript 包的情况下,对项目进行类型感知的代码检查。

本次发布,项目的核心贡献者们希望向整个社区和 Web 生态展示,Biome 将持续发展,并有资格成为下一代 Web 工具链。在短短两年时间内,没有其他工具能取得如此成就。这一切都要感谢相信本项目的公司和个人,特别感谢 Vercel 对类型推断工作的赞助。

初步测试显示,我们基于新类型推断实现的 noFloatingPromises 规则,能够检测到约 75% typescript-eslint 能检测到的悬空 Promise,且性能影响极小。当然,我们还有很多想法来进一步提升这一指标。

请注意,这些数据基于有限的用例,实际效果可能因项目而异。我们期待大家积极试用并反馈体验,以便我们快速提升规则的覆盖率。

安装或升级 @biomejs/biome 包。如果是升级,请运行 migrate 命令:

Terminal window
npm install --save-dev --save-exact @biomejs/biome
npx @biomejs/biome migrate --write

migrate 命令会自动处理配置的所有重大变更,无需手动干预。但仍有部分变更无法自动迁移。我们准备了迁移指南,详细说明了这些变更及手动迁移方法。请务必熟悉这些变更,因为它们会从根本上优化 Biome 的核心功能。

Biome 2.0 带来了众多新特性,以下是我们认为最值得关注的部分。完整特性列表请参见在线变更日志

这两项特性密切相关。没有跨文件类型查询能力,就无法实现类型推断引擎。

在 2.0 之前,Biome 的 Lint 规则只能单文件工作,许多高级规则因此无法实现。为此,我们为 Biome 增加了文件扫描器,会扫描并索引项目中的所有文件,类似于 IDE 的 LSP 服务。

文件扫描器不可避免会带来一定的性能开销。我们理解许多用户选择 Biome 就是看重其速度。在 Beta 阶段,用户也提出了相关担忧。

本次发布的文件扫描器具备以下特点:

  • 可选启用,从 v1 升级到 v2 不会显著影响格式化和 Lint 的性能。
  • 默认仅用于发现嵌套配置文件,速度极快,性能影响极小。
  • 仅当启用 project 规则 时,才会进行全量扫描(包括 node_modules)。
  • 用户可通过 files.includes 控制扫描范围(node_modules 除外)。
  • 需要类型收集或模块图查询的规则只会在 project 域推荐,我们始终将速度和性能放在首位,用户拥有完全控制权。

我们大幅提升了对 Monorepo 的支持。依赖 package.json 的规则现在会自动使用正确的包配置。更重要的是:现已支持嵌套配置文件。

每个项目依然需要在根目录有一个 biome.jsonbiome.jsonc,但现在允许在子目录中有任意数量的嵌套配置文件。嵌套配置需显式标记,有两种方式:

第一种:

biome.jsonc
{
"root": false,
// ...
}

root 字段设为 false,表示这是嵌套配置。这样即使在子目录运行 Biome,也能识别项目根配置。

需要注意,嵌套配置默认不会继承根配置。如需继承,请使用 v1 就有的 extends 字段:

第二种:

biome.jsonc
{
"extends": "//",
// ...
}

这是一种简写语法,等价于 root: false 并自动继承根配置。

再见了,繁琐的相对路径(如 "extends": ["../../biome.json"])👋

我们还准备了详细指南帮助你配置。

Biome 2.0 首次引入了 Linter 插件

目前插件功能有限,仅支持匹配代码片段并报告诊断。

例如,以下插件会报告所有 Object.assign() 的用法:

`$fn($args)` where {
$fn <: `Object.assign`,
register_diagnostic(
span = $fn,
message = "建议使用对象展开运算符替代 Object.assign()"
)
}

这是第一步,未来我们会持续增强插件能力,欢迎大家参与讨论并提出建议。

Biome 1.x 的 import organizer 有如下局限:

  • 空行分隔的导入被视为独立分组,排序时无法跨分组移动。
  • 同一模块的多条导入不会合并。
  • 不支持自定义排序规则。

Biome 2.0 彻底解决了这些问题。所有示例中的 organizer_v2.js 代码片段都可直接由新组织器生成。

此外,还支持组织 export 语句、通过注释显式分组、导入属性排序等。

详细用法见官方文档

Import Organizer 一直是 Biome 的特殊功能,既不属于 Linter,也不属于 Formatter。Biome 2.0 将其归入全新的 Assist 体系。Assist 提供操作(actions),类似于 Lint 规则的修复,但不产生诊断。

Import Organizer 被纳入 Assist,同时我们还新增了如 useSortedKeys(对象字面量键排序)、useSortedAttributes(JSX 属性排序)等操作。

更多信息见相关页面

在原有 // biome-ignore 基础上,新增了 // biome-ignore-all,可在整个文件范围内抑制某条规则或格式化。

还支持通过 // biome-ignore-start// biome-ignore-end 标记抑制区间(// biome-ignore-end 可省略,表示直到文件结尾)。

详细用法见相关页面

经过数月努力,HTML Formatter 现已可用,欢迎大家试用并反馈问题!这标志着 Biome 向全面支持 Vue、Svelte 等 HTML 模板语言迈出了重要一步。

目前仅支持 .html 文件,不会格式化 .vue.svelte 文件中的 HTML,也不支持嵌入的 JS/CSS。已实现 attributePositionbracketSameLinewhitespaceSensitivity 等选项。

HTML 格式化器仍处于实验阶段,2.0 正式版默认关闭。目前已能解析大部分 Prettier 的 HTML 测试用例,并正确格式化其中 46/124 个。虽然尚未完全对齐 Prettier,但我们有信心输出的格式不会破坏文档。如遇异常,欢迎反馈问题

可在配置文件中启用 HTML 格式化:

{
"html": {
"formatter": {
"enabled": true
}
}
}

现在,让我们向所有支持者致以诚挚感谢!

it's

特别感谢我们的白金赞助商 Vercel,赞助了类型推断工作,由 Core Contributor Member @arendjr @arendjr 负责。

VercelVercel

特别感谢金牌赞助商 Depot,为项目提供了高效强大的 CI Runner,大大提升了开发效率和可靠性!

DepotDepot

恭喜 Core Contributor Member @siketyan @siketyan 成为项目核心贡献者!得益于他的贡献,JetBrains 插件 现已稳定并支持多工作区。

感谢 Core Contributor Member @conaclos @conaclos Import Organizer 重构、新 glob 引擎、众多新规则等方面的巨大贡献。

感谢 Core Contributor Member @arendjr @arendjr 构建多文件架构、持续完善类型推断、插件及其他改进。

感谢 Core Contributor Member @nhedger @nhedger 编写 GitHub Action,并发布新版 VS Code 扩展

感谢 Core Contributor Member @dyc3 @dyc3 领导 HTML Parser 和 Formatter 开发,这两者都极其复杂,尤其是在对齐 Prettier 体验方面。

最后,感谢所有赞助者贡献者

没有软件是没有 bug 的,我们会持续修复并发布补丁。

核心贡献者将继续推进2025 路线图,重点关注以下方向:

  • 让 HTML 支持更加稳定
  • 扩展 HTML 支持到 Vue、Svelte、Astro 等框架
  • 推进 Markdown 支持,从解析器开始
  • 持续完善类型推断基础设施,覆盖更多场景,新增规则
  • 以及更多!

Biome 是由热爱编程、热爱开源、认同 Biome 理念的志愿者驱动的项目,欢迎任何形式的贡献 😁

如果你熟悉 Biome,欢迎帮助我们将网站翻译成你的母语。在翻译进度面板可查看支持的语言及进度。

欢迎加入我们的 Discord 服务器,与社区成员交流互动。

如果你喜欢技术挑战,想学习 Rust,或提升解析器、编译器、分析器等相关知识,Biome 是你的不二之选!

可参与的方向包括但不限于:

如果你认可 Biome 的未来,也可以通过 Open CollectiveGitHub Sponsors 提供资金支持。

此外,项目还提供企业支持计划,企业可雇佣核心贡献者为 Biome 工具链的特定方向提供支持。