新的 Lint 工具 oxlint 发布了,比 ESLint 快 50 倍 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mysteryzzz
V2EX    前端开发

新的 Lint 工具 oxlint 发布了,比 ESLint 快 50 倍

  •  1
     
  •   mysteryzzz 2023-12-14 22:49:47 +08:00 2122 次点击
    这是一个创建于 741 天前的主题,其中的信息可能已经有所发展或是发生改变。

    英文原文: https://oxc-project.github.io/blog/2023-1212-announcing-oxlint.html

    告诉大家一个好消息,OxLint 现在正式发布了!可能有些同学不了解,简单介绍一下,它和 ESLint 一样,是一个 Javascript 代码检查工具,只是它不需要任何复杂的配置,就能帮助我们捕捉错误或无用代码。它使用 Rust 编写,速度非常地快,和 ESLint 对比起来,大概快 50 ~ 100 倍。

    尤大也惊叹它的速度之快:

    CleanShot 2023-12-14 at 21.16.26@2x.png

    放个图给大家感受一下:

    CleanShot 2023-12-14 at 20.48.05@2x.png

    更详细的性能对比请前往 bench-Javascript-linter

    如何使用

    OxLint并非旨在完全取代 ESLint,毕竟 ESLint 生态已经很完善了,有些时候我们并不关注它的性能问题,但 当 ESLint 的速度成为工作流程瓶颈时,可以把它当做一个增强工具。

    比如有些项目会在 lint-staged 或者 CI 设置运行 ESLint ,如果有一个大项目本来在 lint-staged 阶段要花费 10 秒,现在就连 1 秒都不到,连给你接水摸鱼的时间都没了(狗头保命)。

    说了这些,我们看看怎么用。要在 Javascript / TypeScript 代码库中测试 OxLint ,只需在存储库的根目录下执行以下命令:

    npx oxlint@latest # npm pnpm dlx oxlint@latest # pnpm yarn dlx oxlint@latest # yarn bunx oxlint@latest # bun deno run oxlint@latest # deno 

    如果有报错,命令行就会抛出详细的警告。同时,我们也有 VSCode 插件,在插件市场搜索 oxc 就可以搜到。

    更多内容,请阅读我们的 安装指南

    设计

    1. 比 ESLint 快 50-100 倍

    在实际场景中,Shopify 告称他们的原本需要运行 75 分钟 ESLint ,现在仅需 10 秒。

    这是来自 Jason Miller ,Shopify DX 和 Preact 作者的消息:

    oxlint 对我们来说是一个巨大的胜利。我们以前的 lint 设置需要运行 75 分钟,因此我们在 CI 中分配了 40 多个工作程序。

    相比之下,oxlint 在单个工作程序上对相同代码库的 lint 大约需要 10 秒钟,而且输出更易于解释。

    当我们迁移时,甚至发现了一些旧设置中隐藏或跳过的几个错误!

    OXlint 专门为性能设计,在其中,利用 Rust 和并行处理是其中的关键因素。

    2. 为正确性进行代码检查

    OxLint 默认识别错误、冗余或混乱的代码 优先考虑正确性而不是一些吹毛求疵的规则(分类为 perfsuspiciouspedanticstyle)。

    它的分类借鉴自了 clippy分类规则。初次见,可能会觉得很不适应,但是一旦熟悉,就会觉得这样的的分类是如此的方便,好用!

    运行默认模式(不加任何参数,直接 npx oxlint)识别出来的错误,一般都是需要修正的错误。

    3. 使用便捷

    现在配置新的 Javascript / TypeScript 代码库变得越来越复杂。遇到兼容性问题的可能性很高,可能导致数小时的时间浪费。这就是为什么我们设计 OXLint 以零配置的方式出现的原因。别说配置文件了,Node.js 也不是必需的!

    我们工具的大多数调整可以通过命令行完成,目前兼容 ESLint 的配置文件的工作也在进行中。

    4. 增强诊断

    理解 lint 工具的信息可能具有挑战性。Oxlint 旨在通过定位根本原因并提供有用的信息来简化这一过程,也就是说,我们的报错信息比较容易读懂。看一个例子:

    如果我们想在 vscode中运行一下性能相关的 lint 规则: oxlint -D perf

    得到的结果如下:

    image.png

    5. 统一的规则

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

    我们认识到在 Javascript 生态系统中插件的重要性,并且也正在研究基于 DSL 的插件系统。

    然而,你可能会喜欢一个独立的 lint 工具 无需管理一系列插件依赖项,不想解决兼容性问题、或者由于版本限制而求助于分支插件


    感谢大家阅读到这,希望大家可以使用 OxLint 获得更愉悦的开发体验,也预祝大家即将到来的元旦假期快乐!

    要开始使用,请查阅安装指南,或者了解更多关于 oxc 项目的信息。

    我们项目还有很多好玩的东西,欢迎来玩 https://oxc-project.github.io/

    3 条回复    2024-09-10 11:11:04 +08:00
    Aoang
        1
    Aoang  
       2023-12-15 10:18:57 +08:00
    和 biome 对比下看看?它格式化也集成了
    chuck1in
        2
    chuck1in  
       2023-12-20 10:13:29 +08:00
    我觉得 eslint 最不好的一点就是要和 prettier 互相配置真的太麻烦了,如果有一个工具能够把这两个都解决了就好了。
    yb2313
        3
    yb2313  
       2024-09-10 11:11:04 +08:00
    连最基本的格式化都做不到, 还要依赖 eslint 去完成另一半, 比如说配个单引号, 直到今天都不行, 那我还不如用 biome, 设计理念就感觉别扭
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2898 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:03 PVG 22:03 LAX 06:03 JFK 09:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86