Oxlint
Oxlint (/oʊ-ɛks-lɪnt/) 是一个基于 Oxc 编译器栈构建的面向 JavaScript 和 TypeScript 的高性能 linter。
为大规模而生
Oxlint 为大型仓库和 CI 环境而构建。其架构消除了限制 ESLint 性能的结构性瓶颈。
我们的基准测试显示 Oxlint 比 ESLint 快 50 到 100 倍。
以正确性为优先的默认设置
Oxlint 开箱即用。默认情况下,它优先进行高价值的正确性检查。这些检查会发现不正确、不安全或无用的代码,使团队能够在不产生过多噪音的情况下采用 Oxlint。
随着需求演进,可以逐步启用额外的规则。
庞大的规则集,专注于兼容性
为了让迁移更简单,Oxlint 包含了超过 755 条规则,覆盖了大多数团队已经在使用的 linter 插件,包括:
- ESLint 核心规则
- TypeScript 规则(包括类型感知规则)
- 热门插件,如 React、Jest、Vitest、Import、Unicorn 和 jsx-a11y
- 兼容 ESLint 插件生态系统的自定义 JS 插件
这种广度使迁移变得简单,同时不牺牲规则覆盖。并且已经构建了为您迁移整个 linter 配置的工具。
类型感知 linting
Oxlint 利用 TypeScript 编译器的原生 Go 移植版本(tsgo,即 TypeScript 7),提供完整的 TypeScript 兼容性和与 TypeScript 本身相同的类型系统行为。
这使需要类型的关键检查成为可能,例如检测浮动 Promise。
相比之下,Biome 的方法是实现自己的类型推断而不是依赖 TypeScript 编译器,他们指出覆盖率仍在改进中。
参见:类型感知 linting
多文件分析
Oxlint 将多文件分析作为一等能力支持。
启用后,Oxlint 会构建项目范围的模块图,并在规则之间共享解析和解析。这改进了依赖跨文件导入的检查,并有助于避免 ESLint 中 import/no-cycle 等规则常见的性能断崖。
参见:多文件分析
对人类和 AI 友好的诊断
Oxlint 的诊断设计既可被人阅读,也可被机器执行。
除了清晰的消息外,诊断还包括结构化信息,如精确的跨度、上下文数据和相关文档的链接。这有助于 AI 理解问题并可靠地应用修复。
以可靠性为优先
Oxlint 为不容许失败的工作流而构建。
崩溃被视为最高优先级的 bug。 性能倒退被视为 bug。
稳定性和吞吐量始终是优先考虑的,特别是对于 CI 和大型 monorepo。
快速开始
推荐的设置是将 Oxlint 安装为开发依赖并添加脚本。
pnpm add -D oxlint在 package.json 中添加脚本:
{
"scripts": {
"lint": "oxlint",
"lint:fix": "oxlint --fix"
}
}下一步:
采用路径
TIP
如果您正在从 ESLint 迁移,请参阅"从 ESLint 迁移"页面获取详细指导。
选择适合您仓库的方法:
- 替换 ESLint(推荐大多数项目使用)。 将 Oxlint 作为您的主要 linter。
- 使用
@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>块进行 lint
详见兼容性矩阵了解详细的框架支持。
功能特性
- 原生插件,内置 756 条规则,覆盖广泛的规则,无需庞大的 JavaScript 依赖树。
- 自动修复,快速应用安全更改。
- 忽略文件,控制哪些路径被 lint。
- 内联忽略注释,在文件中忽略规则。
- 多文件分析,用于需要项目范围上下文的规则,如导入分析 no-cycle。
- 类型感知 linting,用于需要 TypeScript 类型信息的规则。
- JS 插件(alpha),用于与现有 ESLint 插件兼容。
使用 Oxlint 的项目
Oxlint 被以下热门项目在生产环境中使用:
- elastic/kibana
- getsentry/sentry-javascript
- renovatebot/renovate
- preactjs/preact
- date-fns/date-fns
- outline/outline
- PostHog/posthog
- actualbudget/actual
- cloudflare/agents