Eslint 要被 Oxlint替换了吗

1,999 阅读4分钟

什么是 Oxlint

由于最近的rust在前端领域的崛起,基于rust的前端生态链遭到rust底层重构,最近又爆出OxLint,是一款基于Rust的linter工具。Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。

事实上,Oxlint 是 Oxc 项目旗下的一款产品,专为 JavaScript 和 TypeScript 创建一系列高性能工具。 而 Oxc 正在构建一个解析器、linter、格式化程序、转译器、压缩器、解析器等等,而且全部用 Rust 编写,性能非常优秀。

Oxlint 项目与 Biome 和 Ruff 有着相同的理念,即 JavaScript 工具可以用性能更高的语言重写,而集成工具链可以提高不同工具集无法提供的效率。

image.png

不同,根据官方描述,Oxlint 并不打算完全取代 ESLint。 当 ESLint 的缓慢成为工作流程中的瓶颈时,Oxlint 可以作为增强功能的又一个选择。为了更快的反馈循环,建议在 lint 阶段或 CI 设置中的 ESLint 之前运行 oxlint,因为在大型代码库上运行甚至只需要几秒钟。

要在 JavaScript / TypeScript 代码库中测试 oxlint,只需在存储库的根目录中执行以下命令安装即可。

npx oxlint@latest
// pnpm
pnpm dlx oxlint@latest
// deno
deno run oxlint@latest
// bun
bunx oxlint@latest

目前 Oxlint 在 Github 上通过 MIT 协议开源,有超过 4.9k 的 star,是一个值得关注的前端优质开源项目,项目链接:github.com/oxc-project…

 

比 ESLint 快 50-100 倍

在现实场景中,Shopify 声称消耗 75 CI 分钟 ESLint 通过 Oxlint 只需 10 秒。

下面是来自 Shopify DX 和 Preact 的创建者 Jason Miller 的描述:

oxlint 对 Shopify 来说是一个巨大的胜利。 之前的 linting 设置需要 75 分钟才能运行,因此通常需要将其分散到 CI 中的 40 多名工作人员中。

相比之下,oxlint 在单个工作程序上检查相同代码库大约需要 10 秒,并且输出更容易解释。团队甚至发现了一些在迁移时被旧设置隐藏或跳过的错误!

大部分性能提升源于 Oxlint 专门针对性能而设计,利用 Rust 和并行处理作为关键因素。下图演示了使用Oxlint和使用Lint的时间对比:

image.png

Oxlint 解析器的目标是成为最快的基于 Rust 的可用于生产的解析器。可以看到,linter 比 ESLint 快 50 倍以上,并且会随着 CPU 核心的数量而扩展。

检查正确性的 Lint

Oxlint 默认识别错误、冗余或令人困惑的代码。优先考虑正确性,而不是不必要的挑剔规则(分类为性能、可疑、迂腐或风格),这些规则默认情况下是禁用的,我们可以根据实际情况进行相应的配置。

Usage: oxlint [-A=NAME | -D=NAME]... [--fix] [PATH]...


Allowing / Denying Multiple Lints
  For example `-D correctness -A no-debugger` or `-A all -D no-debugger`.
  The default category is "-D correctness".
  Use "--rules" for rule names.
  Use "--help --help" for rule categories.
    -A, --allow=NAME          Allow the rule or category (suppress the lint)
    -D, --deny=NAME           Deny the rule or category (emit an error)


Enable Plugins
        --import-plugin       Enable the experimental import plugin and detect ESM problems
        --jest-plugin         Enable the Jest plugin and detect test problems
        --jsx-a11y-plugin     Enable the JSX-a11y plugin and detect accessibility problems


Available positional items:
    PATH                      Single file, single path or list of paths


Available options:
    -h, --help                Prints help information

开箱即用零配置

设置新的 JavaScript / TypeScript 代码库变得越来越复杂。 工具之间很可能会遇到兼容性问题,这可能会导致浪费数小时的时间。

这就是为什么将 oxlint 设计为开箱即用的零配置, 甚至 Node.js 也不是必需的。 大多数调整可以通过命令行进行,并且从 ESLint 配置文件读取配置也正在开发中。

{
    "ignorePatterns": ["temp.js", "**/vendor/*.js"],
    "rules": {
        //...
    }
}

增强诊断

理解 linter 消息可能比较困难。 Oxlint 旨在通过查明根本原因并提供有用的消息来简化这一过程,从而无需阅读冗长的规则文档,节省宝贵的时间。

在 vscode 存储库中可以运行 oxlint -D perf命令执行诊断:

image.png

综合规则

Oxlint 尚未提供插件系统,但目前正在积极整合 TypeScript、React、Jest、Unicorn、JSX-a11y 和 Import 等流行插件的规则。

Oxlint 也逐渐意识到插件在 JavaScript 生态系统中的重要性,并且也在研究基于 DSL 的插件系统。

但是,很多开发者可能会喜欢独立的 linter,即无需管理插件依赖项列表、解决兼容性问题或由于版本限制而求助于分叉插件。

参考:

oxc-project.github.io/blog/2023-1…

oxc-project.github.io/docs/learn/…

github.com/oxc-project…