前端新玩具來了,速度快的驚人
概念
Oxlint 是 OXC 工具集的其中一個工具,用于捕獲錯誤或無用的代碼,作用和 ESLint 類似。
OXC 是字節(jié)跳動出品的一個用 Rust 編寫的 JavaScript 高性能工具集合,該項目的重點在于構(gòu)建 JavaScript 的基本編譯器工具:解析器、linter、格式化程序、轉(zhuǎn)譯器、壓縮器和解析器。此外,OXC 還為 Rspack、Rolldown 和 Ezno 等新興 JavaScript 工具提供支持。
現(xiàn)階段,oxlint 無意完全取代 ESLint;當(dāng) ESLint 的緩慢成為工作流程中的瓶頸時,它可以作為增強功能。
系統(tǒng)要求:oxlint 專為 darwin-arm64、darwin-x64、linux-arm64、linux-x64、win32-arm64 和 win32-x64 構(gòu)建。
Oxc Github:https://github.com/oxc-project/oxc。
特性
Oxlint 的特新如下:
- 比 ESLint 快 50 - 100 倍,并隨 CPU 核心數(shù)量不斷擴展。
- 超過 200 條規(guī)則,且正在不斷增加,來自 eslint、typescript、eslint-plugin-react、eslint-plugin-jest、eslint-plugin-unicorn 和 eslint-plugin-jsx-a11y。
- 支持.eslintignore。
- 支持ESLint 注釋禁用。
下面來詳細看看這些特性。
比 ESLint 快 50-100 倍
在現(xiàn)實場景中,Shopify 報告稱,他們的 75 CI 分鐘 ESLint 運行現(xiàn)在只需 10 秒。大部分性能提升源于 Oxlint 專門針對性能而設(shè)計,利用 Rust 和并行處理作為關(guān)鍵因素。
檢查正確性
Oxlint 默認識別錯誤、冗余或令人困惑的代碼 ,優(yōu)先考慮正確性而不是不必要的挑剔規(guī)則(分類為 perf、suspicious、pedantic 或 style),默認情況下禁用。
Oxlint 默認識別代碼中的錯誤、冗余或令人困惑的部分。它的設(shè)計原則是優(yōu)先考慮代碼正確性,而不是過度挑剔的規(guī)則。Oxlint 將問題分類為 perf(性能)、suspicious(可疑)、pedantic(追求細節(jié))或 style(風(fēng)格),默認情況下這些規(guī)則是禁用的。
使用方便
Oxlint 的設(shè)計目標之一是提供零配置的開箱即用體驗,以減少設(shè)置新的 JavaScript/TypeScript 代碼庫時可能遇到的兼容性問題。它甚至不需要 Node.js 環(huán)境來運行,并且可以從現(xiàn)有的 ESLint 配置文件中讀取當(dāng)前項目的配置,簡化了調(diào)整和集成的過程。
增強診斷功能
理解代碼檢查工具的消息可能會很具有挑戰(zhàn)性。Oxlint 的目標是通過準確定位根本原因并提供有用的提示來簡化此過程,從而消除了閱讀冗長規(guī)則文檔的需求,節(jié)省時間。
在 VSCode代碼庫中運行 oxlint -D perf:
合并規(guī)則
Oxlint 當(dāng)前尚未提供插件系統(tǒng),但團隊正在積極整合來自流行插件(例如 TypeScript、React、Jest、Unicorn、JSX-a11y和Import)的規(guī)則。
Oxc 團隊深知在 JavaScript 生態(tài)系統(tǒng)中插件的重要性,并且正在研究基于DSL的插件系統(tǒng)。
不過,用戶也可能會喜歡一個獨立的代碼檢查工具,它無需管理插件依賴列表,避免兼容性問題,或因版本限制而使用分叉插件。
使用
直接在存儲庫的根目錄運行 oxlint:
npx oxlint@latest
可以通過以下命令來獲取規(guī)則列表:
npx oxlint@latest --rules
可以通過以下命令來獲取配置說明:
npx oxlint@latest --help
Oxc 提供了 VS Code 插件供開發(fā)者使用:
插件下載:https://marketplace.visualstudio.com/items?itemName=oxc.oxc-vscode。
效果
那在真實應(yīng)用中的效果怎么樣呢,下面來看看一些體驗反饋。
Vue.js 的作者尤雨溪表示,在對 Vue 3 的代碼庫進行測試時,測試了約 200 條規(guī)則 + 約 590 個文件,在 50 毫秒內(nèi)就完成了,再次運行僅用了 30 毫秒。
Moonrepo 的創(chuàng)建者表示,oxlint(和 oxc 工具)真是太瘋狂了。不僅在性能上,而且在操控性上。依靠 Rust 是一個不錯的選擇!
Preact 的作者表示,oxlint 對 Shopify 來說是一個巨大的勝利,之前的 linting 需要 75 分鐘才能運行,因此將其分散到 CI 中的 40 多個 worker 中。相比之下,oxlint 在單個 worker 上檢查相同的代碼庫大約需要 10 秒,并且輸出更容易解釋。