Oxlint
Oxlint (/oʊ-ɛks-lɪnt/) 是一个基于 Oxc 编译器栈构建的高性能 JavaScript 与 TypeScript 代码检查工具。
面向大规模场景设计
Oxlint 专为大型代码仓库和 CI 环境打造。其架构消除了 ESLint 中限制性能的结构性瓶颈。
我们的 基准测试 显示,Oxlint 的速度比 ESLint 快 50 到 100 倍。
以正确性为核心的设计默认值
Oxlint 无需额外配置即可直接使用。默认情况下,它优先启用高信号度的正确性检查。这些检查能够发现代码中不正确、不安全或无用的部分,使团队可以在不产生过多噪音的前提下轻松采用 Oxlint。
随着需求演进,可以逐步启用更多规则。
覆盖广泛且持续增长的规则集合
Oxlint 包含 超过 690 条规则,覆盖大多数团队已使用的插件,包括:
- ESLint 核心规则
- TypeScript 规则
- 常见插件如 React、Jest、Unicorn 及 jsx-a11y
- 兼容 ESLint 插件生态系统的自定义 JS 插件
这一广泛的规则覆盖使得迁移过程简单高效,同时不会牺牲规则完整性。
支持类型感知的代码检查
Oxlint 利用了 TypeScript 编译器的原生 Go 实现(tsgo,又称 TypeScript 7),提供完整的 TypeScript 兼容性以及与 TypeScript 自身一致的类型系统行为。
这使得我们可以实现对类型有依赖的关键检查,例如检测“浮动的 Promise”。
相比之下,Biome 采用的方法是自行实现类型推断,而非依赖 TypeScript 编译器,他们也承认目前的覆盖率仍在提升中。
参见:类型感知的代码检查
多文件分析支持
Oxlint 将多文件分析作为一项核心能力。
启用后,Oxlint 会构建项目级的模块图,并在各规则间共享解析与依赖分析结果。这提升了依赖跨文件导入的检查效率,避免了类似 import/no-cycle 在 ESLint 中常见的性能陡降问题。
参见:多文件分析
适配 AI 的诊断信息
Oxlint 的诊断信息设计为既便于人类阅读,也易于机器处理。
除清晰的消息外,诊断还包含结构化信息,如精确的作用域范围和上下文数据。这有助于 AI 准确理解问题并可靠地应用修复。
可靠性优先
Oxlint 的设计目标是满足那些不容失败的工作流。
崩溃被视为最高优先级的缺陷。 性能下降也被视为缺陷。
稳定性和吞吐量始终被优先考虑,尤其是在 CI 环境和大型 monorepo 项目中。
快速上手
推荐的做法是将 Oxlint 安装为开发依赖,并添加脚本。
pnpm add -D oxlint在 package.json 中添加脚本:
{
"scripts": {
"lint": "oxlint",
"lint:fix": "oxlint --fix"
}
}下一步:
采纳路径
TIP
如果你正从 ESLint 迁移,可参考 “从 ESLint 迁移”页面 获取详细指导。
根据你的仓库情况选择合适的方式:
- 完全替换 ESLint(适用于大多数项目)。 将 Oxlint 作为主代码检查工具。
- 使用
@oxlint/migrate等工具迁移现有的 ESLint 配置。
- 使用
- 逐步迁移(适用于大型仓库)。 先运行 Oxlint,再禁用重叠规则的情况下运行 ESLint。这样可在迁移过程中保持 CI 速度。
- 使用
eslint-plugin-oxlint在同时运行时禁用重叠的 ESLint 规则。 - 此方式同样建议使用
@oxlint/migrate工具。
- 使用
Oxlint 支持的功能
Oxlint 支持以下内容:
- JavaScript 与 TypeScript(
.js,.mjs,.cjs,.ts,.mts,.cts) - JSX 与 TSX(
.jsx,.tsx) - 框架文件(
.vue,.svelte,.astro)——仅检查其中的<script>块
功能特性
- 原生插件 提供全面的规则覆盖,拥有 695 条内置规则,且无需庞大的 JavaScript 依赖树。
- 自动修复 可快速应用安全的修改。
- 忽略文件 用于控制哪些路径需要被检查。
- 行内忽略注释 用于在单个文件内跳过特定规则。
- 多文件分析 支持需要全局项目上下文的规则,例如导入分析中的 no-cycle。
- 类型感知的代码检查 用于需要类型信息的规则。
- JS 插件 (实验性)用于与现有 ESLint 插件兼容。
使用 Oxlint 的项目
Oxlint 已被多个知名项目在生产环境中采用,包括:
