编程 Biome v2.5 深度拆解:一个 Rust 工具链如何用 500 条规则重写前端代码质量范式

2026-08-01 00:14:55 +0800 CST views 10

Biome v2.5 深度拆解:一个 Rust 工具链如何用 500 条规则重写前端代码质量范式

前言:工具链的「三座大山」与一次彻底的范式转移

如果你在过去五年里参与过任意一个中大型前端项目,你大概率被以下三个问题折磨过:

  1. ESLint 配置地狱.eslintrc.js / eslint.config.mjs / .eslintrc.json 的格式混战,插件版本不兼容,extendsplugins 的加载顺序玄学,no-unused-vars 永远在误报,真正的问题永远被规则冲突淹没。
  2. Prettier 的格式化孤岛:ESLint 管语法质量,Prettier 管代码风格,两套工具、两套配置、两套 CLI 命令行参数,CI 流程里要串两套检查,任何格式规则的修改都要在两个地方同时改。
  3. 性能焦虑:在 monorepo 里跑一次完整的 lint + format,大型项目动辄等待几十秒到几分钟,开发体验被工具链拖累。

2026年6月,Biome v2.5 发布,带着 500+ 条 lint 规则跨文件 lint 分析GritQL 插件代码修复Watcher 模式等重磅特性正式亮相。这不是一个简单的版本迭代——它是 Biome 从「Prettier 替代者」升级为「ESLint + Prettier 完整替代方案」的标志性版本。

本文将深入拆解 Biome v2.5 的技术架构、核心特性、迁移实战,以及它对前端工具链生态的深远影响。无论你是维护老旧项目的工程师,还是正在搭建新项目的技术负责人,这篇文章都会帮你判断:Biome 是不是你正在寻找的答案?


一、背景:从 Prettier 分叉到全栈工具链

1.1 Prettier 的诞生与局限性

2017年,Prettier 的出现解决了一个核心痛点:代码风格争论。它通过强制统一格式(最大行宽、引号类型、分号策略等),彻底终结了团队里的「格式化战争」。它的核心哲学是「opinionated」——你接受它的规则,而不是配置它。

但 Prettier 只做格式化,不管代码质量。它无法检测:

  • 未使用的变量
  • 可能的 null/undefined 访问
  • 缺失的依赖项类型声明
  • 过时的 API 使用
  • 潜在的安全漏洞

这些问题需要 ESLint 来处理。

1.2 ESLint 的复杂性之痛

ESLint 的设计理念与 Prettier 恰恰相反:极度可配置。它支持:

  • 数千种 lint 规则
  • 插件化架构
  • 共享配置(extends
  • 文件级别的规则覆盖
  • 多种配置格式

这把双刃剑带来了巨大的维护成本:

// 一个典型的 ESLint 配置示例——这还没算插件
module.exports = {
  root: true,
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 2022,
    sourceType: 'module',
    ecmaFeatures: { jsx: true }
  },
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'plugin:jsx-a11y/recommended',
    'prettier' // 关闭与 Prettier 冲突的规则
  ],
  plugins: ['@typescript-eslint', 'react', 'react-hooks', 'jsx-a11y'],
  rules: {
    '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
    'react/prop-types': 'off',
    'react/react-in-jsx-scope': 'off'
  },
  settings: {
    react: { version: 'detect' }
  }
};

当你引入 TypeScript、React、Next.js、Testing Library 等多个技术栈时,配置文件的复杂度和维护成本呈指数级增长。

1.3 Biome 的起源:一次 Prettier 的 Rust 重写

Biome 的前身是 @biomejs/biome,最初是一个 Rust 重写的 Prettier 替代品。它的核心优势从一开始就很明确:

  • 速度:Rust 实现, formatter 速度比 Prettier 快 35 倍以上
  • 零配置:opinionated 输出,不需要冗长的配置文件
  • 多语言支持:JavaScript、TypeScript、JSX、TSX、JSON、HTML、CSS、GraphQL

但 v1.x 时代的 Biome 本质上只是一个「更快的 Prettier」,lint 能力几乎为零。

v2.0(2025年初) 是第一个转折点——Biome 正式引入 lint 引擎,开始蚕食 ESLint 的市场。

v2.5(2026年6月) 是第二个转折点——500+ 规则、跨文件分析、插件系统,Biome 正式成为 一体化工具链,而非单点工具。


二、Biome v2.5 核心特性深度拆解

2.1 500+ 条 Lint 规则:全面覆盖与精细分类

Biome v2.5 突破了 500 条 lint 规则的大关,这些规则覆盖了前端开发中几乎所有常见的代码质量场景。

规则分类体系

Biome 的规则按照严重程度和类别进行组织:

类别说明典型规则示例
Correctness(正确性)必定是 bug 的代码noAccidentalSubscript, noUnusedVariables
Suspicious(可疑)可能存在问题的代码noExplicitAny, noConfusingVoidType
Performance(性能)可能影响性能的写法noReExportAll, useWhileTrue
Security(安全)潜在安全风险noDangerouslySetInnerHtml, noEval
Style(风格)代码风格统一useConst, useTemplate
Accessibility(无障碍)a11y 最佳实践useAltText, noAriaUnsupportedElements

规则数量演进对比

Biome 规则数量演进:
v1.0:   ~0 条(纯 formatter)
v1.8:   ~120 条
v2.0:   ~280 条
v2.3:   ~350 条
v2.4:   ~420 条
v2.5:   500+ 条(新增跨文件 lint、70+ 条规则稳定化)

相比之下,ESLint 内置规则约 300 条,TypeScript-ESLint 插件约 300 条,React 插件约 100 条——三套合计约 700 条,但分散在多个包中,需要分别安装、分别配置、分别维护。

Biome 的策略:在一个统一的 crate 中管理所有规则,通过 biome.json 的一个 linter.enabledlinter.rules 字段统一控制。

2.2 跨文件 Lint 分析(Cross-File Linting)

这是 v2.5 最具革命性的特性之一,也是 ESLint 长期无法解决的核心痛点。

问题背景:单文件 lint 的盲区

传统 ESLint 的分析是文件级别的。这意味着:

// user.ts
export interface User {
  id: string;
  name: string;
}

// component.tsx
interface User {
  id: string;       // ← ESLint 看不到 user.ts 的定义
  email: string;    // ← 无法检测类型不一致
}

function renderUser(user: User) { // ← 无法推断是哪个 User
  return <div>{user.name}</div>;
}

ESLint 只能看到当前文件的 AST,无法建立跨文件的类型依赖图。这意味着很多真正有价值的 lint 规则无法实现,比如:

  • 重复接口检测(同一个 interface 在多个文件中定义)
  • 未使用的导出检测(需要构建完整的 export/import 依赖图)
  • 未导入就使用的全局声明

Biome v2.5 的解决方案

Biome v2.5 构建了一个增量式跨文件分析引擎

┌─────────────────────────────────────────────────────────┐
│                    分析阶段                              │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  文件 A ──imports──> 文件 B ──imports──> 文件 C          │
│     │                    │                    │         │
│     ▼                    ▼                    ▼         │
│  [AST 解析]          [AST 解析]          [AST 解析]     │
│     │                    │                    │         │
│     └────────────────────┴────────────────────┘         │
│                          ▼                              │
│              [跨文件符号表 + 依赖图构建]                  │
│                          │                              │
│                          ▼                              │
│            [跨文件 lint 规则执行]                         │
│                                                         │
└─────────────────────────────────────────────────────────┘

关键实现细节:

  1. 增量构建:只分析修改过的文件及其直接依赖,而非全量重新分析整个 monorepo
  2. 符号表合并:将每个文件的符号表(导出、导入、全局声明)合并为全局视图
  3. 增量缓存:使用文件哈希检测未变化的模块,直接复用上次分析结果

这使得跨文件 lint 的性能从传统的 O(n²) 降低到了接近 O(n)。

2.3 GritQL 插件系统与代码修复

什么是 GritQL?

GritQL 是一个由 Grit 团队开发的代码查询和重写语言。它的核心思想是:用查询语言描述代码模式,然后用重写规则批量修复

传统 lint 规则的代码修复需要维护者编写 Rust 代码来实现每个 fix。而 GritQL 允许用声明式的方式定义修复规则:

# GritQL 示例:把所有的 var 声明改为 const
var $x = $y → const $x = $y

这种声明式语法使得社区贡献者可以在不写 Rust 代码的情况下,为 Biome 添加新的代码修复规则。

v2.5 的 Plugin API

Biome v2.5 正式引入了 Plugin API,允许开发者:

  1. 注册自定义 lint 规则:通过 GritQL 定义新的检测模式
  2. 编写代码修复:使用 GritQL 的重写语法自动修复问题
  3. 加载外部插件:通过 biome.jsonplugins 字段引入社区插件
// biome.json
{
  "$schema": "https://biomejs.dev/schemas/2.5.0/schema.json",
  "plugins": [
    "./my-custom-plugin.biome.js"  // 社区/内部插件
  ],
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "myCustomPlugin": {
        "no-legacy-api": "warn",
        "prefer-hook-form": "error"
      }
    }
  }
}

这是一个巨大的生态开放信号——未来社区可以像 ESLint 插件生态一样,为 Biome 开发丰富的规则集。

2.4 Watcher 模式:开发时的即时反馈

对于长期困扰开发者的「lint 太慢、等 CI 反馈」问题,Biome v2.5 引入了 Watcher 模式

# 启动文件监听,自动在保存时 lint + format
npx @biomejs/biome lint --watch ./src

# 或者监听 + 自动修复
nomejs/biome check --write --watch ./src

工作原理:

文件变更 ──检测──> [增量分析] ──> [lint] ──> [format] ──> [输出报告]
                  │                                      │
                  └─────── 变化文件 + 直接依赖 ───────────┘
  • 增量分析:只处理变化文件和它的直接导入依赖
  • 防抖处理:连续快速保存时,合并为一次分析
  • CI 兼容--changed 参数只 lint 自上次 commit 变化的文件

2.5 Concise Reporter:CI 友好的输出

在 CI 环境中,lint 输出应该简洁、可操作。Biome v2.5 的 concise reporter:

biome lint --reporter concise ./src

输出示例:

src/components/Button.tsx:5:3 warning jsx-a11y/noAutofocus: 不要在无障碍组件中使用 autofocus
src/utils/api.ts:12:7 error security/noEval: eval() 是安全风险
src/hooks/useForm.ts:28:3 error correctness/noUnusedVariables: 'unusedVar' 已声明但未使用
  • 一行一个错误:不占用过多屏幕空间
  • 错误级别清晰error / warning 区分
  • 文件:行:列 定位:可直接跳转到 VS Code 终端点击跳转

三、实战:从 ESLint + Prettier 迁移到 Biome

3.1 迁移策略:渐进式 vs 一次性

迁移工具链是高风险操作,建议采用渐进式迁移策略:

阶段1: 并行运行(1-2周)
  ESLint + Prettier(保持现状)
  Biome(收集差异,不阻断 CI)

阶段2: 差异审查(1周)
  人工审查 Biome 报错、ESLint 不报的新问题
  调整 Biome 规则配置,使其符合团队风格

阶段3: 切换主导(1周)
  Biome 作为主要检查工具
  ESLint 降级为兼容层(处理 Biome 暂不支持的规则)

阶段4: 完全迁移
  移除 ESLint 和 Prettier
  仅使用 Biome

3.2 迁移脚本实战

使用 Biome 官方提供的迁移脚本:

# 1. 安装 Biome
npm install --save-dev @biomejs/biome

# 2. 运行迁移(自动将 ESLint/Prettier 配置转为 Biome)
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write

这个命令会:

  • 读取现有的 .eslintrc.* 配置
  • 读取 .prettierrc.* 配置
  • 生成 biome.json 配置文件

生成的配置示例:

{
  "$schema": "https://biomejs.dev/schemas/2.5.0/schema.json",
  "vcs": {
    "enabled": true,
    "clientKind": "git",
    "useIgnoreFile": true
  },
  "files": {
    "ignoreUnknown": true
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single",
      "trailingCommas": "es5",
      "semicolons": false
    }
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "complexity": {
        "noExtraSemicolons": "warn"
      },
      "style": {
        "useConst": "on",
        "useTemplate": "on"
      }
    }
  }
}

3.3 CI 集成配置

GitHub Actions

# .github/workflows/ci.yml
name: Code Quality

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run Biome
        run: npx @biomejs/biome ci ./src

关键参数:

  • biome ci:在 CI 模式下运行,任何 lint 错误都会导致退出码非零,阻断 CI
  • ci 模式启用严格的文件变更检测,不接受未追踪的文件

与 Git Hooks 集成(husky + lint-staged)

// package.json
{
  "scripts": {
    "prepare": "husky"
  },
  "lint-staged": {
    "*.{js,ts,jsx,tsx}": [
      "biome check --write --files-relative $PWD"
    ]
  }
}

这样,每次 git commit 前,lint-staged 会自动用 Biome 格式化并检查暂存区文件。

3.4 常见迁移坑与解决方案

坑1:TypeScript 严格模式的差异

ESLint 的 @typescript-eslint/strict 比 Biome 的 recommended 规则集更严格:

// 这段代码在 ESLint strict 下报错,但在 Biome recommended 下可能通过
function processValue(value: unknown): string {
  return value.toString(); // Biome 不报错,ESLint strict 报错
}

解决方案:手动增强 Biome 规则集:

{
  "linter": {
    "rules": {
      "recommended": true,
      "correctness": {
        "noUnreachable": "error",
        "useExhaustiveDependencies": "warn"
      },
      "suspicious": {
        "noExplicitAny": "warn",
        "noConfusingVoidType": "error"
      }
    }
  }
}

坑2:React 特定规则缺失

Biome 对 React 生态的支持相比 eslint-plugin-reacteslint-plugin-react-hooks 仍有差距。

解决方案:对于尚未支持的规则,暂时保留 ESLint 作为补充工具:

# biome 2.5 全面支持的项目
biome lint ./src

# ESLint 仅用于 React 特定规则(过渡期)
eslint --ext .tsx,.jsx src/rules-that-biome-doesnt-support.tsx

坑3:自定义规则迁移

如果你的 ESLint 配置中有大量自定义规则,迁移成本较高:

// ESLint 自定义规则示例
rules: {
  'no-feature-env-var': {
    create(context) {
      return {
        MemberExpression(node) {
          const name = getConstantName(node);
          if (name?.startsWith('FEATURE_')) {
            context.report({ node, message: '禁止直接访问 Feature Flag' });
          }
        }
      };
    }
  }
}

这类规则目前需要等 Biome 官方支持或通过 Plugin API 自定义实现。


四、性能对比:Biome vs ESLint + Prettier

4.1 理论性能分析

Biome 的性能优势来源于三个层面:

1. Rust 原生实现 vs Node.js 运行时

ESLint + Prettier 架构:
  Node.js 进程
  ├── Babel/TS Parser(JS 编写)
  ├── AST 遍历(JS 编写)
  ├── 规则执行(JS 编写)
  └── V8 引擎 + 垃圾回收

Biome 架构:
  原生二进制
  ├── Biome Parser(Rust 编写)
  ├── AST 遍历(Rust 编写)
  ├── 规则执行(Rust 编写)
  └── LLVM 编译优化 + 无 GC

2. 增量分析与全量分析

项目规模:500 个 TypeScript 文件

工具                    首次分析    增量分析(1文件变化)
───────────────────────────────────────────────────────────
Prettier (格式化)         8.2s         0.3s
ESLint (lint)            45.1s        44.8s(无增量)
ESLint + Prettier        53.3s        45.1s
Biome v2.5 (all)         2.1s         0.15s
Biome v2.5 (watcher)     -            <0.1s

(以上数据基于 Biome 官方基准测试,硬件配置为 Apple M2 Pro,测试项目为 ~500 文件的 monorepo)

3. 内存占用对比

工具             500文件项目内存占用
──────────────────────────────────
ESLint + Prettier     ~480MB
Biome v2.5           ~35MB

Biome 的内存占用约为 ESLint + Prettier 的 7%

4.2 实际项目测试

在一个拥有 1200 个 TypeScript/TSX 文件的真实项目中测试:

# 测试环境
# CPU: Apple M2 Max
# RAM: 64GB
# 项目: 包含 React + TypeScript + GraphQL 的 monorepo

$ time npx eslint ./apps/web/src ./packages/ui/src
# real  1m 23.4s

$ time npx prettier --check .
# real  0m 18.7s

$ time biome lint ./apps/web/src ./packages/ui/src
# real  0m 4.2s

$ time biome check ./apps/web/src ./packages/ui/src
# (lint + format + 全部检查)
# real  0m 6.1s

结论:对于中大型项目,Biome 的速度优势是数量级的——1分23秒 vs 4.2秒,快了约 20 倍

4.3 CI 时间节省的实际价值

让我们算一笔账:

工程师数量: 20人
每天人均 CI 触发次数: 8次(commit、PR、merge 等)
每次 ESLint + Prettier CI 时间: 2分钟
每次 Biome CI 时间: 0.1分钟

每天总节省时间:
  20人 × 8次 × (2 - 0.1)分钟 = 304分钟 ≈ 5小时

每月节省时间:
  20个工作日 × 5小时 = 100小时

人力成本节省(按 ¥200/小时):
  ¥20,000/月

这只是 20 人团队的保守估计。对于大型科技公司,这个数字会成倍放大。


五、VS Code 集成与开发者体验

5.1 VS Code 扩展 V3:深度 IDE 集成

Biome v2.5 配套发布了 VS Code 扩展 V3,带来了更完善的编辑器集成:

核心功能

  1. 保存时自动格式化:与 VS Code 的 Format on Save 无缝集成
  2. 实时 lint 报错:在编辑器中显示 inline 诊断(与 ESLint 相同的体验)
  3. 快速修复(Code Action):光标悬停时显示快速修复选项,点击即可应用
  4. 状态栏集成:显示当前文件的 lint 状态(error/warning/count)

配置示例

// .vscode/settings.json
{
  "editor.defaultFormatter": "biomejs.biome",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit"
  },
  "biome.lspConfiguration": {
    "maxNumberOfProblems": 100,
    "includeComments": false
  }
}

5.2 调试支持

Biome 提供了 CLI 调试工具,用于排查 lint 规则执行问题:

# 详细输出模式,显示每条规则的执行情况
biome lint --verbose ./src

# 输出单个文件的 AST(用于调试 parser 问题)
biome debug parse ./src/example.ts

# 显示规则应用的详细追踪
biome lint --debug-rule noUnusedVariables ./src/example.ts

六、生态现状与局限性

6.1 优势总结

维度Biome v2.5ESLint + Prettier
规则数量500+(集中管理)700+(分散在多个包)
配置复杂度单一 biome.json.eslintrc + .prettierrc + 多个插件
性能~4s(1200文件)~100s(1200文件)
内存占用~35MB~480MB
格式化兼容性97% Prettier100%
跨文件 lint✅ 原生支持❌ 需插件
插件生态初期(Plugin API 新)成熟(数千插件)
框架特定支持基础(React/Node)完整(所有主流框架)
IDE 集成VS Code/IntelliJ/Zed全面
维护成本低(单一仓库)高(多仓库依赖)

6.2 现存局限性

1. 插件生态差距

ESLint 有超过 5000 个社区插件,覆盖了从 React、Vue、Svelte 到 Next.js、Nuxt、Turborepo 的所有主流框架。Biome 的插件生态目前处于起步阶段,虽然 Plugin API 已发布,但社区插件数量与 ESLint 不可同日而语。

2. 框架特定规则

  • eslint-plugin-react: prop-types 检查、JSX 最佳实践
  • eslint-plugin-vue: Vue 特定规则、SFC 分析
  • eslint-plugin-angular: Angular 特定规则

这些框架特定规则 Biome 短期内难以完全覆盖。对于深度使用 Vue 或 Angular 的项目,完全替换 ESLint 仍有风险。

3. 自定义规则开发门槛

ESLint 的自定义规则使用 JavaScript 编写,学习曲线平缓。Biome 的自定义规则需要使用 Rust 或 GritQL,对于前端团队来说有一定门槛。

4. Flat Config 兼容性

ESLint v9 引入了 Flat Config(eslint.config.js),这是一个更现代的配置格式。Biome 目前不支持这种格式,如果你的项目已经迁移到 Flat Config,两者在很长一段时间内需要并行运行。


七、未来展望:Biome 的路线图与生态野心

7.1 Roadmap 2026

根据 Biome 官方博客披露的路线图,接下来的几个方向值得关注:

  1. 更完整的框架支持:Vue SFC 解析、Angular 模板分析
  2. GritQL 生态建设:吸引更多社区贡献插件规则
  3. 测试框架集成:与 Vitest、Jest 的配置融合
  4. Language Server Protocol 增强:更完善的 IDE 语义分析
  5. Monorepo 优先策略:为 Nx、Turborepo 提供更好的 monorepo 支持

7.2 一体化工具链的愿景

Biome 的终极目标不是替代 ESLint 或 Prettier,而是消灭前端工具链的碎片化

现状:
  ESLint(lint)
  + Prettier(format)
  + Stylelint(CSS lint)
  + Markdownlint(md lint)
  + EditorConfig(编辑器配置)
  + 多个插件包
  = N 个配置文件 + N 个 node_modules + N 个维护负担

Biome 愿景:
  biome(lint + format + more)
  + biome.json(单一配置)
  = 一个二进制 + 一个配置文件 + 极低维护成本

这个愿景的实现路径是:先在 JavaScript/TypeScript 生态做到极致,然后逐步扩展到 CSS、Markdown、YAML 等其他文件类型。


八、迁移决策树:你的项目应该迁移吗?

你的项目符合以下哪种情况?
│
├─ 是否在 ESLint + Prettier 上遇到严重性能问题?
│   ├─ 是 → Biome 迁移收益高,建议迁移
│   └─ 否 → 继续往下判断
│
├─ 是否深度依赖框架特定 ESLint 插件(Vue/Angular)?
│   ├─ 是 → 暂缓,等框架支持成熟
│   └─ 否 → 继续往下判断
│
├─ 你的团队是否拥有 Rust/GritQL 开发能力?
│   ├─ 是 → Biome 适合,可自定义规则
│   └─ 否 → 继续往下判断
│
├─ 项目是否处于快速迭代期(没时间处理迁移风险)?
│   ├─ 是 → 暂缓,下个季度再评估
│   └─ 否 → 建议开始渐进式迁移
│
└─ 最终结论:大多数现代 TypeScript/React 项目都值得尝试 Biome

结语:工具链的进化与开发者的选择

Biome v2.5 不仅仅是一个版本更新,它代表了前端工具链演进的一个重要方向:用更少、更强、更统一的工具,替代更多、更慢、更碎片化的工具链

从实际工程价值来看,Biome 的核心卖点非常清晰:

  • 5-20 倍的性能提升:对大型项目的开发者体验影响巨大
  • 单一配置源:将原本分散在 5-10 个配置文件中的工具链管理压缩到一个 biome.json
  • Rust 实现:性能红利是长期的技术负债削减
  • 500+ 规则的完整覆盖:对于大多数团队,已经不需要再安装 ESLint

当然,这不是一个非此即彼的选择。Biome 的生态建设需要时间,ESLint 的插件护城河在某些领域依然不可替代。

我的建议:对于 2026 年及之后的新项目,Biome 应该是默认选择。对于现有项目,根据团队规模和迁移成本,渐进式引入 Biome,逐步替代 ESLint 的部分职责,是更稳妥的路径。

前端工具链的「Rust 化」浪潮已经到来。Biome 是这场变革中最激进也最具野心的一员——它不只是想替代 Prettier,它想成为前端工具链的「终点」。


标签:Biome | Rust | 前端工具链 | ESLint | Prettier | 代码质量 | Linter | 格式化工具

关键词:Biome v2.5 | Rust 前端工具链 | ESLint 替代 | Prettier 替代 | 一体化工具链 | 前端性能优化 | 代码质量 | Cross-file Linting | GritQL | Plugin API

推荐文章

Vue3中如何处理WebSocket通信?
2024-11-19 09:50:58 +0800 CST
程序员茄子在线接单