Oxlint 会取代 Eslint 吗?

最近,一个基于 Rust 的代码检查工具 Oxlint 在国外前端社区引起了热议,许多专家对其给予了高度评价。那么,相比于它的大哥 Eslint,Oxlint 有哪些优势?它会在未来取代 Eslint 吗?本文将讨论这个话题。

Oxc 和 Oxlint

OxlintOxc 项目下的一个产品,Oxc 是一个用 Rust 实现的前端工具链集合,包括:

  • Linter:即 Oxlint,可与 Eslint 相媲美,是本文的主角

  • Parser:即 oxc_parser,用于解析 .js(x).ts(x),可与 swc 媲美。基准测试声称其速度是 swc 的两倍

a295b50a7f4710e61d862cdc8828df44.png

  • Resolver:解析 ESM 和 CJS 文件的路径,基准测试显示其速度比 webpack/enhanced-resolve 快 28 倍

  • Formatter:基准测试对比 Prettier,尚未公布

  • Transpiler:对比 Babel 用于将高级语法转为低级语法,尚未公布

  • Minifier:代码压缩工具,尚未公布

除了与 Oxc 具有相同设计理念的工具(所有工具链工具均基于 Rust 开发)之外,还有 BiomeRuff

  • Biome:其前身是由 Babel 作者 Sebastian McKenzie 开发的 Rome。目标语言是 JS

  • Ruff:目标语言是 Python

Oxlint 介绍

Oxlint 引发热议的主要原因是其爆炸性的性能。

df5915daeb68081da91f4c72f0c55e24.png

我使用 Apple M1 Pro 32G 运行一个包含约 50 个文件的小项目,仅用了 18ms,官方声称其基准测试中比 Eslint 快 50-100 倍的说法并非虚言。

8ec86d74a32e85da54ef20c9ef56b02e.png

当然,除了性能优势外,OxlintEslint 还有许多不同之处。接下来,我们将从三个方面比较 OxlintEslint

易用性

Eslint 诞生于 2013 年。相比于竞争对手(如 JSHint),其最大的优势在于提供大量可选规则,并在某些场景下可以自动修复不符合规则的代码。

然而,随着时间推移,这一优势逐渐变成劣势——开发者不再需要大量自定义规则,而是需要基于最佳实践的开箱即用规则集。许多新产品正是基于这一概念而诞生的,如:

  • Prettier:仅检查和格式化代码风格

  • eslint-plugin-antfu:Antfu 自定义规则集的版本

Oxlint 借鉴了上述产品的优势,提供了一套开箱即用的默认规则。这套规则主要关注代码的正确性(如语法错误、冗余代码和容易引起误解的语法),而不是优化代码细节(如语法性能或风格)。

因此,只需要在项目中执行以下命令即可满足常规验证:

npx oxlint@latest

在易用性方面,Oxlint 远胜于 Eslint

可读性诊断

当代码检查工具检测到问题时,它会向开发者提供相关信息。Eslint 提供的信息通常很简短,只告诉你错误的原因。例如,对于以下代码:

let a;

通过信息 "a is defined but never used",我们可以知道错误的原因是变量 a 被定义但未使用。

然而,如果是更复杂的规则,简短的信息可能无法直观地表达错误发生的位置和解决方法。许多时候,我们仍需查看规则文档,了解该规则的具体含义,然后结合错误代码进行分析。

相比之下,Oxlint 提供的信息更加直观和准确。例如,执行以下代码后,会得到一个倍增数的数组:

const numbers = [1, 2, 3, 4, 5];

const result = numbers.reduce((accumulator, current) => {
  return [...accumulator, current * 2];
}, []);

// [ 2, 4, 6, 8, 10 ]
console.log(result);

每次 reduce 回调执行时,数组都会扩展,当数组很长时,这会导致性能问题。

针对这个问题,Oxlint 的信息包括三部分:

  • 错误原因

  • 错误具体发生的位置

  • 解决方法

fa17f5311e202d676356fe9bddd88f25.png

通过查看代码中的哪个 reduce 操作(紫色字体)和哪个扩展操作(青色字体),我们可以识别问题。

虽然有些人可能会说,如果项目很大,阅读如此详细的 lint 信息是一种头疼的事。

但我们需要知道——你可以提供它,但我不一定要使用它,不使用它与不能提供它是完全不同的概念。

在诊断可读性方面,Oxlint 优于 Eslint。

参与成本

参与成本指的是开发者自定义规则的成本。Oxlint 是用 Rust 编写的,如果开发者需要用 Rust 来编写自定义规则,成本会很高。相比之下,Eslint 的规则是用 JS 编写的,成本要低得多。

Oxlint 尝试从两个方面解决这个问题:

不需要自己编写,官方已经编写了常用规则。

截至本文撰写时,官方已经实现了大约 200 多条规则。从规则的名称可以看出,这些规则是从各种常见库的最佳实践中提取出来的,例如:

  • jest: no-confusing-set-timeout

  • react: jsx-no-duplicate-props

  • eslint: default-case-last

  • typescript: no-unnecessary-type-constraint

实现专门为编写规则设计的 DSL。

Oxlint 正在研发一种专门用于编写规则的 DSL。至于这个 DSL 何时发布以及效果如何,目前尚不清楚。

从参与成本的角度来看,Eslint 完全胜出。

Oxlint 会取代 Eslint 吗?

根据已知情况,Oxlint 规则参与成本高于 Eslint。只要这个问题没有解决,Eslint 支持的一些规则 Oxlint 就无法支持。因此,短期内完全取代 Eslint 是不现实的。

然而,就像 Vite 相对于 Webpack,前者并未实现后者的所有功能。但只要满足 90% 开发者的常见需求,并提供更好的体验,就能吸引大多数 Webpack 用户。

Oxlint 也是如此——它建议开发者先运行 Oxlint,然后在 lint-stagedCI 设置中运行 ESLint。这样,大多数常见问题在到达 ESLint 之前就被 Oxlint 阻止了。

这种方法可以显著提高 lint 过程的速度,并且学习曲线很低。因此,它很可能在开发者中迅速流行。

当这种方法变得流行时,随着 Oxlint 规则覆盖范围的增加,它将逐渐替代 Eslint 最常见的 90% 需求。

到那时,会出现 Oxlint 为主,Eslint 为辅(处理少数特殊规则)的情况。

从这个角度来看,Oxlint 有很大的胜算。

尽管 Oxlint 前景光明,但它目前还有一些缺点,例如:

框架语法:Oxlint 原生支持 js(x)ts(x),但不支持 SvelteVue 模板语法。

vscode 插件仍不稳定,有 bug。例如,在下面的代码中,警告应该在第 1 行和第 3 行,但第 2 行也被标记了。

8ee08ff64fe0dd302868d5b13ff6d1ee.png

我相信,随着开发团队的持续投入和社区生态系统的形成,Oxlint 及其底层 Oxc 将拥有光明的未来。

最后:

vue2与vue3技巧合集

VueUse源码解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/692495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XUbuntu22.04之ssh+x11显示远程图形到本机(二百四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

[羊城杯 2023]CSGO

主函数初始化时,有反调试检测 打个断点在前面,然后nop掉 go语言的主函数是main_main 直接来到main_main,发现能可能是base64变表 在前面打个断点,F9 此处为base64变表,来到v25的地址处 得到变表LMNOPQRSTUVWXYZab…

[大模型]CharacterGLM-6B Transformers部署调用

环境准备 在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行demo。 pip换源和安装依赖包 …

PyQt5 多进程 多任务 多线程实现进度条功能 无边框 含源码

概述: 在项目 中我们常遇到,大量计算或者加载数据时,需要用到多线程,此时只能等待,我们这个时间需要添加一下进度条,告诉用户当前需要等待,这时间就需要用到多线程和等待进度条; 效…

SpringCloudAlibaba基础二 Nacos注册中心

一 什么是 Nacos 官方:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 集 注册中心配置中心服务管理 平台。 Nacos 的关键特性包括: 服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理 …

【教程】让小爱音箱Play增强版接入Mi-GPT

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 项目地址:https://github.com/idootop/mi-gpt MiIOT:小米小爱音箱Play 增强版 - 产品规格 - Xiaomi Miot Spec 实现效果图&…

Eslint配置指南

1. Eslint配置指南 1.1. 安装 ESLint1.2. 生成配置文件1.3. 修改配置文件1.4. 创建 .eslintignore 文件1.5. 运行 ESLint1.6. 整合到编辑器/IDE1.7. 自动修复 2. 配置prettier 2.1. 安装依赖包2.2. .prettierrc.json添加规则2.3. .prettierignore忽略文件2.4. 保存自动格式化 3…

二进制中1的个数-java

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、二进制中1的个数 二、算法思路 1.将一个整数转化成二进制形式 2.查询一个数的二进制数中的第k位是多少 3.lowbit(x)操作 三、代码如下 1.代码如下&…

Docker的资源限制

文章目录 一、什么是资源限制1、Docker的资源限制2、内核支持Linux功能3、OOM异常4、调整/设置进程OOM评分和优先级4.1、/proc/PID/oom_score_adj4.2、/proc/PID/oom_adj4.3、/proc/PID/oom_score 二、容器的内存限制1、实现原理2、命令格式及指令参数2.1、命令格式2.2、指令参…

docker部署redis实践

1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器,查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…

coap:安装libcoap

# 称最新版的openssl 安装依赖东东 yum install -y libtool doxygen asciidoc perl-IPC-Cmd下载解压 cd /chz/install/openssl wget https://www.openssl.org/source/openssl-3.3.1.tar.gz tar zxvf openssl-3.3.1.tar.gz编译安装 cd /chz/install/openssl/openssl-3.3.1 .…

数据挖掘--聚类分析:基本概念和方法

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 聚类分析 聚类分析是把一个数据对象&…

计算机组成原理复习笔记

前言 就是按照考试的题型写的总结 非常应试版 题型 一、进制转换 只考 十进制 二进制 十六进制 之间的相互转换 一个个看 (1)十进制 转其他 转二进制:除以2 从小到大取余数(0或1) 转十六进制 : 除以1…

进军rust:从0开始学习rust语法

一.变量类型 Rust语言中的基础数据类型有以下几种: 1.整数型 整数型简称整型,按照比特位的长度和有无符号位可以分为以下几种 isize和usize两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台,如果是32位架…

如何在 iPhone 上恢复已删除的短信

本文介绍如何检索已删除的短信和 iMessage 以及恢复丢失的消息。说明适用于 iOS 17 及更高版本。 如何在 iOS 17及更高版本中恢复文本 恢复已删除短信的最简单方法是使用 iOS 17。从删除短信到恢复它有 30 到 40 天的时间。 在“信息”的对话屏幕中,选择“过滤器”…

老旧机子装linux——Xubuntu

目录 前言 正文 下载系统 ​编辑 制作系统盘: 安装界面 Xubuntu ​编辑 lubuntu 后语 前言 有两台电脑,一台装了Ubuntu22,一台装了debuntu。虽然debuntu界面与乌班图大体一样,但是编译器好像有点区别。由于机子为10年前的老…

二分【1】二分查找框架 查找指定元素

目录 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身 2.查找第一个大于等于自己的 3.查找第一个大于自己的 4.严格递减序列 二。有重复元素 1.取其中第一个出现的 2.取其中最后一个出现的 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身…

【UML用户指南】-11-对高级结构建模-高级关系

目录 1、依赖(dependency) 1.1.1、绑定(bind) 1.1.2、导出(derive) 1.1.3、允许(permit) 1.1.4、实例(instanceOf) 1.1.5、实例化(instanti…

解锁俄罗斯市场:如何选择优质的俄罗斯云服务器

在当前云计算市场上,很多大型的云厂商并没有俄罗斯服务器的云节点,这给许多企业在拓展海外业务时带来了一定的困扰。然而,俄罗斯作为一个经济发展迅速的国家,其市场潜力不可忽视。因此,选择一台优质的俄罗斯云服务器成…

Docker搭建可道云

Docker搭建可道云(存储) 文章目录 Docker搭建可道云(存储)介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…