TS 项目如何从 ESlint8 升级至 9并集成 Prettier

news/2024/9/17 11:04:37/文章来源:https://www.cnblogs.com/jsonq/p/18357943

eslint 8 到 9 属于破坏性更新(Break Change),因此导致 eslint 8 配置方式无法直接使用(可以使用兼容包,但这不是本文的主题)。

其实大家最关心的就是从 eslint 8 到 9 之后的写法,而与 eslint 息息相关的多种配置插件也需要大量的变更,因此本文核心就是:使用 eslint9 配置规则和集成 prettier
废话不多说,开始。

环境要求

不支持 Node 19 所有版本,Node 18最低要求 18.8.0,Node 20最低要求 20.9.0 及 Node 21.1.0 以上。

image

升级 eslint 至最新版

9.9.0 是我写文章时的最新版本

npm i eslint@^9.9.0 -D

安装 @eslint/js

npm i @eslint/js -D

安装 typescript-eslint

npm i typescript-eslint -D

该文件包含了 @typescript-eslint/parser@typescript-eslint/eslint-plugin,因此需移除以上两个依赖,而且以上两个插件不直接支持 eslint9

安装 globals

npm i globals -D

该包在 eslint 的配置中会用到

移除 eslint-config-prettier

eslint 在 8.53.0 之后就不再支持格式化规则,因此 eslint-config-prettier 作为 eslintprettier 的规则冲突解决插件,已经没用了。

旧 eslint 配置文件改名为 eslint.config.js

image

在 8 版本及之前,eslint 默认读取的以上配置文件中,package.json 配置已在 9 中移除,其余配置的兼容性在 10 版本会移除

需提前安装 prettiereslint-plugin-prettier
由于项目是 react,所以 react 相关的都注释掉了,可以参考写法进行配置。
新的 eslint.config.js 内容如下

import js from "@eslint/js";
import globals from "globals";
// import reactHooks from "eslint-plugin-react-hooks";
// import reactRefresh from "eslint-plugin-react-refresh";
import tseslint from "typescript-eslint";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";export default tseslint.config({extends: [js.configs.recommended,...tseslint.configs.recommended,eslintPluginPrettierRecommended,],files: ["**/*.{ts,tsx,js,jsx}"], // eslint 检测的文件,根据需要自行设置ignores: ["dist"],languageOptions: {ecmaVersion: 2020,globals: globals.browser,},plugins: {// "react-hooks": reactHooks,// "react-refresh": reactRefresh,},rules: {...reactHooks.configs.recommended.rules,// "react-refresh/only-export-components": ["warn", { allowConstantExport: true }],"prettier/prettier": "warn", // 默认为 error"arrow-body-style": "off","prefer-arrow-callback": "off","@typescript-eslint/no-explicit-any": "off", // allow any type},
});

eslint-plugin-react-hookseslint-plugin-react-refresh 为 react 相关规则插件,可根据项目框架自行设置 plugins。

验证 eslint 和 prettier 的正确运作

image

eslint-plugin-react-hooks 不兼容 eslint9 处理

eslint-plugin-react-hooks 若需要兼容 eslint9,需安装 rc 版本

npm i eslint-plugin-react-hooks@^5.1.0-rc.0 -D

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

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

相关文章

Spring Cloud Gateway 实现简单自定义过滤器

背景 Spring Cloud Gateway 是 Spring Cloud 退出的第二代网关框架,我们可以用它来实现 反向代理,路由转发,权限校验等功能,这里介绍一个它的基础功能,通过 Filter 机制实现一个简单的 HTTP 接口处理。 从总体上来看 Spring Cloud Gateway 提供的过滤器可以分为两类,一种…

【Java手写RPC框架系列-1】—— 基础知识准备:RPC+Netty

代码随想录知识星球介绍 https://articles.zsxq.com/id_m76jd72243bi.html 基于Netty手写实现RPC https://www.cnblogs.com/mic112/p/15565795.html项目背景与介绍RPC:远程过程调用协议:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用…

非线性规划的经典例题--选址问题

本章会介绍如何利用非线性规划解决选址问题,这个问题是文章线性规划在数学建模中的两道例题中第二道投料问题的第二小题,本章为基于这道题的基础上进行介绍,建议读者返回去看一看 目录一、问题提出二、问题分析三、模型建立四、代码实现1.输入目标函数2.输入线性约束 一、问…

了解10X文库组成

转的文章 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/LittleComputerRobot/article/details/137207083R1: 26 表示10X barcode 的 16bp碱基 + 10bp UMI; i7: 8表示 8bp 样本index序列 Read…

Java数组07:稀疏数组

1. 线性结构线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 线性结构有两种不同存储结构,即顺序存储结构和链式存储结构。 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,即在内存中是连续的,例如数组。 链式存储的线性表称为链表,链表…

【Django开发】django美多商城项目完整开发4.0第2篇:项目准备【附代码文档】

本教程的知识点为:美多商城 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片验证码 1. 后端接口设计: 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送短信 判断帐号是否存在 1. 判断用户名是否存在 后端…

IntelliJ IDEA 单元测试插件 TestMe

IntelliJ IDEA 添加单元测试插件 TestMe

Redis 使用场景

Redis 使用场景前三种使用广泛,另加队列用

Datawhale X 魔搭 AI夏令营 AIGC方向 Task2

代码逐行解析 先记录一下baseline代码通义千问生成的逐行解析: # 安装 Data-Juicer 和 DiffSynth-Studio !pip install simple-aesthetics-predictor # 安装simple-aesthetics-predictor !pip install -v -e data-juicer # 安装data-juicer !pip uninstall pytorch-lightning …

[Paper Reading] Multiple View Geometry Transformers for 3D Human Pose Estimation

Multiple View Geometry Transformers for 3D Human Pose Estimation link 时间:CVPR2024 机构:University of Toronto && Southeast University && Microsoft Research Asia TL;DR 提出一种基于Transformer端到端3D Human Pose Estimation方法MVGFormer,核…

MySQL8.0 Clone Plugin 实现解析浅析

MySQL8.0 Clone Plugin 实现解析浅析 从8.0.17版本开始官方实现了clone的功能,允许用户通过简单的SQL命令把远端/本地的数据库实例拷贝到其他实例后快速拉起一个新的实例。 该功能由一些列的WL组成 :Clone local replica(WL#9209) : 实现了数据本地Clone。 Clone remote repli…

USB协议详解第8讲(USB描述符-字符串和语言ID描述符)

1.字符串描述符相关概念 字符串描述符:首先,字符串描述符就是用字符串描述一个设备的一些属性,毕竟人能看懂的是字符,而不是十六进制,描述的属性包括设备厂商名字、产品名字、产品序列号、各个配置名字、各个接口名字,还有就是由我们用户自己定义的字符串,说白了就是起名…