Biome 1.7 发布,支持从 ESLint 和 Prettier 迁移

近日,Biome v1.7 正式发布!这个新版本提供了从 ESLint 和 Prettier 迁移的简单路径。它还引入了格式化程序和 linter 的实验性机器可读报告、新的 linter 规则和许多修复。

使用以下命令更新 Biome:

shell 复制代码
npm install --save-dev --save-exact @biomejs/biome@latest
npx @biomejs/biome migrate

从 ESLint 迁移

此版本引入了一个新的子命令 biome migrate eslint。此命令将读取您的 ESLint 配置并尝试将其设置移植到 Biome。

该子命令能够处理旧配置文件和平面配置文件。它支持 extends 遗留配置领域并加载共享和插件配置,该子命令也会迁移 .eslintignore

给出以下 ESLint 配置:

js 复制代码
{
  "extends": ["plugin:unicorn/recommended"],
  "plugins": ["unicorn"],
  "ignore_patterns": ["dist/**"],
  "globals": {
    "Global1": "readonly"
  },
  "rules": {
    "eqeqeq": "error"
  },
  "overrides": [
    {
      "files": ["tests/**"],
      "rules": {
        "eqeqeq": "off"
      }
    }
  ]
}

以及以下 Biome 配置:

js 复制代码
{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true
    }
  }
}

运行 biome migrate eslint --write 以将您的 ESLint 配置迁移到 Biome。该命令会覆盖您的初始 Biome 配置。

例如,它禁用 recommended 会产生以下 Biome 配置:

js 复制代码
{
  "organizeImports": { "enabled": true },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": false,
      "complexity": {
        "noForEach": "error",
        "noStaticOnlyClass": "error",
        "noUselessSwitchCase": "error",
        "useFlatMap": "error"
      },
      "style": {
        "noNegationElse": "off",
        "useForOf": "error",
        "useNodejsImportProtocol": "error",
        "useNumberNamespace": "error"
      },
      "suspicious": {
        "noDoubleEquals": "error",
        "noThenProperty": "error",
        "useIsArray": "error"
      }
    }
  },
  "javascript": { "globals": ["Global1"] },
  "overrides": [
    {
      "include": ["tests/**"],
      "linter": { "rules": { "suspicious": { "noDoubleEquals": "off" } } }
    }
  ]
}

该子命令需要 Node.js 加载并解析所有插件并 extends 在 ESLint 配置文件中配置。目前 biome migrate eslint 不支持用 YAML 编写的配置。

我们有一个专门的页面,列出了给定 ESLint 规则的等效 Biome 规则。我们处理一些 ESLint 插件,例如 TypeScript ESLint、ESLint JSX A11y、ESLint React 和 ESLint Unicorn。

有些规则与 ESLint 的对应规则相同,而其他规则则受到启发。默认情况下,Biome 不会迁移启发规则。您可以使用 CLI 标志 --include-inspired 来迁移它们。

从 Prettier 迁移

Biome v1.6 引入了子命令 biome migrate prettier

在 Biome v1.7 中,我们添加了对 Prettier 的 overrides 支持,并尝试将 glob 模式转换 .prettierignore 为 Biome 支持的 glob

在迁移过程中,Prettier 的重写被翻译为 Biome 的重写。考虑到以下 .prettierrc.json

js 复制代码
{
  "useTabs": false,
  "singleQuote": true,
  "overrides": [
    {
          "files": ["*.json"],
          "options": { "tabWidth": 2 }
      }
  ]
}

运行 biome migrate prettier --write 以将 Prettier 配置迁移到 Biome。这会产生以下 Biome 配置:

js 复制代码
{
  "formatter": {
    "enabled": true,
    "formatWithErrors": false,
    "indentStyle": "space",
    "indentWidth": 2,
    "lineEnding": "lf",
    "lineWidth": 80,
    "attributePosition": "auto"
  },
  "organizeImports": { "enabled": true },
  "linter": { "enabled": true, "rules": { "recommended": true } },
  "javascript": {
    "formatter": {
      "jsxQuoteStyle": "double",
      "quoteProperties": "asNeeded",
      "trailingComma": "all",
      "semicolons": "asNeeded",
      "arrowParentheses": "always",
      "bracketSpacing": true,
      "bracketSameLine": false,
      "quoteStyle": "single",
      "attributePosition": "auto"
    }
  },
  "overrides": [
    {
      "include": ["*.json"],
      "formatter": {
        "indentWidth": 2
      }
    }
  ]
}

该子命令需要 Node.js 来加载 JavaScript 配置,例如 .prettierrc.jsbiome migrate prettier 不支持以 JSON5、TOML 或 YAML 编写的配置。

可读的报告

Biome 现在能够输出 JSON 报告,详细说明命令发出的诊断信息。您可以在检查代码库时发出报告:

shell 复制代码
biome lint --reporter=json-pretty .

目前,我们支持两种报告格式:jsonjson-pretty

请注意,报告格式是实验性的,将来可能会发生变化。请尝试此功能,并告知我们是否需要在报告中添加任何信息。

检查 git 暂存文件

Biome v1.5 添加了 --changed 选项,用于格式化和检查已更改的 Git 跟踪文件。

今天我们推出了一个新选项 --staged,它允许您仅检查添加到 Git 索引的文件(暂存文件)。这对于检查要提交的文件是否已格式化和 linted 非常有用:

shell 复制代码
biome check --staged .

这对于编写您自己的预提交脚本非常方便。请注意,不会忽略已暂存文件上未暂存的更改。因此,我们仍然建议使用专用的预提交工具。

下一步进展

我们已经开始了 CSS 格式化程序和代码检查工作。面向插件系统的早期实施也正在进行中。我们的一些贡献者已经开始了 GraphQL 和 YAML 的初步工作。

参考链接:biomejs.dev/blog/biome-...

相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰9 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy10 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom11 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom11 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试