前端正在被“锈”化

jeff Atwood 在 2007 年说:"any application that can be writen in JavaScript , willeventually be written in JavaScript",翻译过来就是:“任何可以使用 JavaScript 来编写的应用,并最终也会由 JavaScript 编写”,也被称为:Atwood定律。2024 回过头看看,正如他所讲那样 JavaScript 语言遍地开花。但是随着前端扮演角色越来越重要,JavaScript 由于是单线程从而导致性能问题也暴露出来,webpack 打包慢,项目上 ESLint + Prettier后卡死等等。可以看到天下苦 JavaScript 性能差久已。于是 Rust 也就顺势而上了,目前前端基建领域基本上都被“锈”化了一遍,今天我们就来看看被“锈”化的 ESLint + Prettier ,Biome

初识 Biome

在认识 Biome 之前,先聊聊为什么要了解它,也就是 ESLint 和 Prettier 的问题:

  • ESLint + Prettier 的组合需要维护多个配置文件

  • 传统工具的性能问题,特别是在大型项目中

  • 工具之间的配置冲突

  • 环境依赖复杂

我们再来看看“锈”化后的代码格式化工具 Biome:

  1. 极致的性能:由 Rust 编写,比传统工具快 35 倍

  2. 简单的配置:零配置即可使用,无需复杂设置

  3. 一体化方案:将格式化和代码检查集成在一个工具中

  4. 兼容性强:与 Prettier 有 97% 的兼容性

  5. 支持多种语言:支持 JavaScript、TypeScript、JSX、JSON、CSS 和 GraphQL

简直可以说是“降维打击”,知道了 why,我们看看 Biome 是个 what?其实 Biome 还有一个彩蛋,我们下面讲

带着好奇和憧憬的心情,我搜索到了 Biome 的官网:https://biomejs.dev/ 。官网上是这样介绍的: web 项目的一个工具链,谈笑间即可完成格式化和 lint 等操作。我只能说 Biome 是懂吊胃口的。必须学啊!

它提供了 playground :https://biomejs.dev/playground/ 。但是需要吐槽的是明明有中文入口,但是 404:

image-20241222162854025

简单体验了一下感觉还是可以的,但是 playground 是游乐场啊,行不行还是要去项目里看看的

image-20241222163042597

image-20241222163042597

在去之前,还是先看看人家官方还说了哪些:

  • 像 Prettier 一样格式化代码,但是节省了时间

  • 修复问题,Biome 输出更加详细更加场景化的诊断

  • 一个命令,就搞定 Eslint + Prettier

  • 默认集成了社区的最佳实践

等等好处,我们赶快试试吧!

体验 Biome

使用 Biome 大多数是两个场景:

  1. 搭建一个新项目,集成 Biome,抛弃 ESLint + Prettier

  2. 已经有的项目替换 Biome 为格式化和代码检查工具

我们一个个来体验,先看新项目如何集成:

新项目集成 Biome

我们使用 vite 的脚手架创建一个新的 react 项目, 创建成功后,我们去 package.json 把 eslint + prettier 相关的依赖删除,这样项目就没有 Prettier 和 ESLint 的。

image-20241222165750217

image-20241222165750217

我们同时关闭编辑器的 eslint 和 prettier 插件,我们去修改代码会发现已经不会自动格式化,不规范代码也不报错了。那太好了,接下来请我们主角登场:

pnpm i -D --save-exact @biomejs/biome 

然后运行 pnpm biome init 来初始化 biome 配置文件

image-20241222170355718

image-20241222170355718

上面说:

image-20241222170537551

image-20241222170537551

我们按照它说的做,我们可以先故意写一些不规范的代码,然后运行: npx @biomejs/biome check --apply ./src,看看 biome 会不会自动识别出来

image-20241222171006691

image-20241222171006691

结果它都正确识别出来了,人家一个工具不仅仅是干了 ESLint 的事情,还干了 Prettier 的事情(真的是工具链)。但是我们使用这俩的时候,我们会在 package.json 写好脚本,这样就不用每次在终端输入了,biome 当然也行的:

"format": "biome format --write .", // 格式化所有文件
"lint": "biome lint .", // 进行代码检查
"check": "biome check .", // 同时运行格式化和代码检查
"fix": "biome check --apply .", // 自动修复可以修复的问题
"ci": "biome ci ." // 环境中使用的检查命令

这上面写的都是什么呀!不急,我们马上学,下面我们来看看常用的 biome 命令(CLI)

  • init:项目根目录创建 biome.json 配置文件。生成的配置文件包含基本的格式化和检查规则

  • check:最全面的命令,它会同时运行格式化、代码检查和导入排序
    • --write:告诉 Biome 直接修改源文件,将格式化后的内容写入原文件

  • format:仅格式化(可理解为 Prettier)。后面可以跟目录,文件,也可以是特定类型文件(类似:"./src/**/*.{js,jsx,ts,tsx}"
    • --write:直接应用格式化

  • lint:仅代码检查(可理解为 ESLint)
    • --write:自动修复可修复的问题

  • ci:专门为 CI 环境设计,会以非交互模式运行检查

一些常用的命令行选项

# 详细输出模式
--verbose# 指定配置文件路径
--config-path=./custom-biome.json# 设置诊断级别
--diagnostic-level=error|warn|info# 忽略语法错误
--skip-errors# 修改输出格式
--reporter=json|summary|github# 规则集选项
--rule-set recommended
# recommended 规则集包含:
# 最佳实践规则
# 常见错误检测
# 代码风格规则
# 这些规则经过 Biome 团队精心筛选和测试

我们还可以在 pre-commit 中运行pnpm biome check --write $(git diff --staged --name-only) ,来先运行 biome

老项目使用 Biome

上面图片给出的提示中,还有两个命令我们没有使用,就是

biome migrate eslint --write
biome migrate prettier --write

在老项目一般都是集成了 ESLint + Prettier 的,所以我们迁移,肯定需要兼容之前的规范的。我们可以使用这两个命令来实现,更多细节:https://biomejs.dev/zh-cn/guides/migrate-eslint-prettier/。

做完这两个事项后,我们先检查一下之前配置的规则是否都还在,如果都还是正常的,我们就可以移除 ESLint 和 Prettier 相关的依赖和配置文件了

我使用我的博客项目测试,非常好用,以后再也不怕写代码保存的时候卡死了

Biome 插件

像 ESLint 和 Prettier 一样,Biome 也有自己的编辑器插件,我们只需要搜索安装,然后

image-20241222175846141

image-20241222175846141

总结

项目配置 ESLint 和 Prettier 一大堆依赖和代码,运行 ESLint 和 Prettier 编辑器总是卡死,Biome 的出现解决了这个问题,无需任何配置,只需要安装好就可以写代码。Biome 代表了前端工具链的新方向,它通过 Rust 优秀的性能,已经受到社区的广泛喜爱。

而且 Biome 还赢得了 prettier 挑战赛的 20000 元美金,感兴趣的可以看:https://biomejs.dev/blog/biome-wins-prettier-challenge/ 。这个挑战的要求是:通过超过 95% 的 Prettier JavaScript 测试,可以看出 Biome 真的是可以信赖的,这算不算一个彩蛋哈哈!

参考

  1. 官网:https://biomejs.dev/

  2. Rust 引领前端基建新潮流:字节跳动的深度应用实践

  3. 什么是 “锈”化

  4. 使用 biome 的新项目

  5. 我的博客改为 blome 作为代码检测

  6. 和 AI 的聊天

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

穷举vs暴搜vs深搜vs回溯vs剪枝_全排列_子集

46. 全排列 递归解决:一开始选一个数,递归进入下一层再选一个新的数,直到到最后一个数。反会上一层遍历其它数。 每次递归到叶子节点就找到了一种组合,思路有了具体怎么实现? 1.怎么记录每条路径? 定义一个…

【openGauss】正则表达式次数符号“{}“在ORACLE和openGauss中的差异

一、前言 正则作为一种常用的字符串处理方式,在各种开发语言,甚至数据库中,都有自带的正则函数。但是正则函数有很多标准,不同标准对正则表达式的解析方式不一样,本次在迁移一个ORACLE数据库到openGauss时发现了一个关…

【代码随想录|完全背包问题】

518.零钱兑换|| 题目链接:518. 零钱兑换 II - 力扣(LeetCode) 这里求的是组合数,就是不强调元素排列的顺序,211和121是同一个数那种,要先遍历物品,这样的话我算出来的每个值才是按顺序121&…

go语言的成神之路-筑基篇-gin常用功能

第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能: 使用场景: 可能的错误: 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…

Qt 12.28 day3

作业: 1】 思维导图 2】 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&a…

mybatis-plus 用法总结

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,旨在简化开发者的 CRUD 操作。它在 MyBatis 的基础上提供了更多的功能和便利性,如代码生成器、分页插件、性能分析插件等,使开发者能够更高效地进行数据库操作。MyBatis-P…

Rust: enum 和 i32 的区别和互换

在Rust编程语言中,enum(枚举)和i32是两种不同类型的数据结构,它们各自有不同的用途和特性。 i32 i32是一个32位的有符号整数类型。它用于存储整数值,范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型…

迁移学习 详解及应用示例

简介: 迁移学习是一种机器学习技术,其核心思想是利用在一个任务上已经学到的知识(源任务:任务已经有一个训练好的模型,然后我们将这个模型的某些部分或知识迁移到一个新的但相关的“目标任务”上。)来帮助解…

【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点

etcd 是一个高可用的分布式键值存储,广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性,管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理,帮助您高效地维护集群节点。 目录 …

前端 学习

vue结构 package.json 作用:记录项目的元信息,包括依赖包、脚本命令、项目名称、版本号等。 常见字段: dependencies:运行时依赖的 npm 包。 devDependencies:开发时使用的依赖包。 scripts:定义 npm 脚本…

矩阵的因子分解1-奇异值分解

文章目录 矩阵的因子分解1-奇异值分解求法归纳例1. 对矩阵 A ( 0 1 − 1 0 0 2 1 0 ) A \begin{pmatrix} 0 & 1 \\ -1 & 0 \\ 0 & 2 \\ 1 & 0 \end{pmatrix} A ​0−101​1020​ ​ 进行奇异值分解1. 计算 A H A A^H A AHA 的特征值和特征向量2. 将奇异值按…

网易企业邮箱登陆:保障数据安全

网易企业邮箱是一款为企业提供安全可靠的电子邮件服务的工具。通过网易企业邮箱,企业可以实现员工之间的高效沟通和信息共享,同时保障数据的安全性。 企业邮箱的安全性是企业信息保护的重要组成部分。网易企业邮箱采用了多层加密技术,确保邮件…

王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 插入图表,针对每一个图表上的元素,都可以选中选右键进行修改数据;本章中的向两端延伸,设置数据的原理;数据格式的显示方式&…

LeetCode 1705.吃苹果的最大数目:贪心(优先队列) - 清晰题解

【LetMeFly】1705.吃苹果的最大数目:贪心(优先队列) - 清晰题解 力扣题目链接:https://leetcode.cn/problems/maximum-number-of-eaten-apples/ 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,…

Docmatix:突破性的文档视觉问答数据集

Docmatix:突破性的文档视觉问答数据集 1. 数据集概述 1.1 规模与创新 数据规模: 240万张图像950万个问答对来自130万份PDF文档较现有数据集扩大240倍 应用领域:文档视觉问答(DocVQA)可访问性:通过HuggingFace平台开放获取 2. …

Doris使用注意点

自己学习过程中整理,非官方 dws等最后用于查询的表可以考虑使用row存储加快查询,即用空间换时间duplicate key的选择要考虑最常查询使用适当使用bloomfilter 加速查询适当使用aggregate 模式降低max,avg,min之类的计算并加快查询,比如加速明细和汇总的一体化查询使用ALTER…

Kubernetes之NodeSelector与NodeName实战

目录 目标 版本 官网 概述 实战 NodeName实战 NodeSelector实战 目标 通过配置NodeSelector与NodeName实现Pod运行(或优先运行)在我们期望的节点之上。了解这两种实现方法的区别。 版本 Kubernets v1.25.0 官网 将Pod分配给节点https://kubernet…

【docker系列】打造个人私有网盘zfile

1. 介绍 是一个适用于个人的在线网盘(列目录)程序,可以将你各个存储类型的存储源,统一到一个网页中查看、预览、维护,再也不用去登录各种各样的网页登录后管理文件 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐…

系统思考—冰山模型

“卓越不是因机遇而生,而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越,从来不是一次性行为,而是一种习惯。正如我们在日常辅导中常提醒自己:行为的背后,隐藏着选择的逻辑,而选择的根源,源…

麒麟信安参展南京软博会,支持信创PC的新一代云桌面及全行业解决方案备受瞩目

12月20日至22日,由中国软件行业协会、江苏省软件行业协会等单位联合主办的2024中国(南京)软件产业博览会在南京国际博览中心隆重开幕。本届博览会以“软件驱动未来,数字闪耀金陵”为主题,吸引了各界目光,省…