ESLlint重大更新后,使用旧版ESLint搭配Prettier的配置方式

news/2024/5/8 4:49:18

概要

就在前几天,ESLint迎来了一次重大更新,9.0.0版本,根据官方文档介绍,使用新版的先决条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1.0的版本,新版ESLint将不再直接支持以下旧版配置(非扁平化)文件:

  1. .eslintrc.js
  2. .eslintrc.cjs
  3. .eslintrc.yaml
  4. .eslintrc.yml
  5. .eslintrc.json

取而代之的是以下格式的配置文件:

  • eslint.config.js

  • eslint.config.mjs

  • eslint.config.cjs

注:如果仍要使用旧版的配置文件,需要额外配置,可以查阅官方文档,这里不过多介绍。

另外,新版ESLint还剔除了与Prettier冲突的规则,也就意味着与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”解决冲突问题。

写这篇文章的目的是因为,我前段时间写了一篇uniap项目配置eslint的文章,昨天创建项目的时候用以下命令初始化ESLint:

npm init @eslint/config

发现项目下并没有生成eslintrc.js、eslintrc.cjs之类的文件,而且自动安装的eslint版本为9.0.0。因为新版ESLint在执行eslint命令时,需要使用高版本的NodeJS,而我本地的NodeJS版本为v16.14.0,那么在不升级node版本的情况下,就只有使用旧版的eslint。

经过一番折腾,发现了一种间接的方法。

安装及初始化旧版ESLlint

首先,在项目package.json文件中,把eslint依赖的版本改为小于等于8.6.0的版本,

执行:

npm i
#或
pnpm i

安装好依赖,接下来就是初始化eslint,让它自动安装相关依赖和生成eslint配置文件,

注:不推荐直接复制别人的eslint配置文件,和相关依赖,这往往会造成由于依赖版本兼容问题,或者eslint格式问题,导致eslint不生效,而具体错误原因又不好排查。

在项目根目录执行如下命令:

pnpm eslint --init
#或
npx eslint --init
#或
./node_modules/.bin/eslint --init

根据提示选择eslint相关配置:

接下来的的依赖安装环节会报错,

但是我们熟悉的eslintrc.js配置文件已经自动生成了:

报错不用慌,这是对等依赖问题,报错信息中也说了解决方法,我们只需要手动安装相关依赖,并使用 --legacy-peer-deps指令忽略掉对等依赖问题就行了。

在控制台,我们能够发现需要安装的依赖包:

执行如下命令,手动安装:

pnpm add eslint-plugin-vue @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest --force -D 
#或
npm i eslint-plugin-vue @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest --legacy-peer-deps -D

安装及配置Prettier

手动安装好eslint的相关依赖后,执行如下命令安装Prettier及其插件:

pnpm add prettier eslint-config-prettier eslint-plugin-prettier -D
#或
npm i prettier eslint-config-prettier eslint-plugin-prettier -D

安装成功后,在eslint配置文件extends选项的最后一项位置,追加“plugin:prettier/recommended”配置:

在项目根目录创建.prettierrc.cjs文件,填入相应Prettier规则,可参考我的:

module.exports = {printWidth: 80, // 一行最多80个字符tabWidth: 2, // 设置工具每一个水平缩进的空格数useTabs: false,//不使用缩进,而使用空格semi: true, // 句末是否加分号vueIndentScriptAndStyle: true,//Vue文件中<script>和<style>是否缩进singleQuote: false, // 用单引号trailingComma: 'none', // 最后一个对象元素符加逗号bracketSpacing: true,// 箭头函数,只有一个参数的时候,也需要括号arrowParens: 'always', // 不需要写文件开头的 @prettierinsertPragma: false, // 不需要自动在文件开头加入 @prettierendOfLine: 'auto' // 换行符使用 auto
}

再把package.json文件中的eslint依赖版本改为8.45.0至8.57.0之间的版本,重新安装一下依赖。

Reload 一下vscode:

不出意外eslint与prettier的规则就应该生效 了,不符合规则的地方就会报红色波浪线,前提是vscode安装了eslint插件

 错误排查

如果完成了以上步骤后,配置依然没有生效(没有红色波浪线),我们可以在package.json文件中加一条命令,

然后执行:

pnpm run lint
#或
npm run lint

看下控制台报什么错,然后根据提示解决,我这里在使用eslint版本为8.6.0的情况下执行,报了如下错误

这种就是你的依赖有兼容问题,改了版本就对了,

如果你看到的是下图这种:

ESLint准确的找出了你项目中存在问题的文件 ,那么你的eslint配置和相关依赖肯定是没问题的,重启下vscode或Reload一下vscode,你将会看到熟悉的红色波浪线。

保存自动格式化 

要实现VSCode保存自动格式化不符合规范的代码,可以参考的我另一篇文章:

uniapp+vite+vue3+ts配置eslint代码检查及prettier规范检查

注:折腾不易,转载请注明出处!


http://www.mrgr.cn/p/78207073

相关文章

Modbus转Profinet网关连接LED大屏与PLC通讯

Modbus转Profinet网关(XD-MDPN100)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,如变频器、智能高低压电器、电量测量装置等进行连接。通过Modbus转…

【Go语言】接口类型(一)接口类型与接口的值

本文是介绍golang接口类型的第一篇,主要介绍接口类型与接口类型的值的相关概念。 1. 静态类型、动态类型、动态值 所谓的静态类型(即 static type),就是变量声明的时候的类型。 var age int // int 是静态类型 var name strin…

2024年最好用的10款ER图神器!

分享10款ER图工具,详细分析他们的功能特点、价格和适用场景,可以根据你的需求进行选择。ER图(Entity-Relationship Diagram)是数据库设计中常用的一种模型,用于描述实体之间的关系。这种图形化的表示方法旨在帮助人们理解和设计数据库结构,它们在数据库开发和设计中非常有…

【Network Automation系列】-- 第二章

继续上文,【Network Automation系列】-- 第一章 在第1章,对TCP/IP协议套件和Python的回顾中,我们研究了网络通信协议背后的理论和规范。 我们还快速浏览了一下Python语言。在本章中,我们将开始深入研究使用Python对网络设备的管理。 特别是,我们将研究使用Python以编程方式…

初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-012

PDF格式公众号回复关键字:ZKYDT012原文1 Richard found the bird in the forest, didn’t he? 解析 1 Richard ,found 发现了, the bird 这只鸟, in the forest 在森林里, didn’t he? 不是吗 理查德在森林里发现了这只鸟,不是吗? 2 He saw a strange bird in a bush. 他…

【51单片机项目】基于51单片机自制多功能小键盘/模拟USB键盘【附源码】(STC89C52RC+CH9328)

目录 一、效果展示 二、创作灵感 三、硬件电路 注意事项 工作原理 四、源码 main.c 五、附录 CH9328工作原理 CH9328的模式选择 ​编辑 全键盘键码值表 参考链接 一、效果展示 该小键盘具有三种功能: 1、自动输入开机密码 2、每隔一段时间自动按下ct…

【Qt 专栏】DateTime日期时间组件

本文转载自:https://cloud.tencent.com.cn/developer/article/2371799 本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。在Qt中,日期和时间的处理通常使用 QDateTime 类。QDateTime 是一个用于表示日期和时间的类,而与之相关的组件还包括 QDate 、 QTime以及QD…

【threejs教程7】threejs聚光灯、摄影机灯和汽车运动效果

【图片完整效果代码位于文章末】 在上一篇文章中我们实现了汽车模型的加载,这篇文章主要讲如何让汽车看起来像在运动。同时列出聚光灯和摄像机灯光的加载方法。 查看上一篇👉【threejs教程6】threejs加载glb模型文件(小米su7)&…

七段数码管

import turtle, datetime def drawGap(): # 绘制数码管间隔 turtle.penup() turtle.fd(5) def drawLine(draw): # 绘制单段数码管 drawGap() turtle.pendown() if draw else turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def drawDigit(d): # 根据数字绘制七段…

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先(leader)地位。 其LCAP产品是Microsoft Power Apps,扩展了AI Builder、Dataverse、Power Automate和Power Pages,这些都包…

git 命令怎么回退到指定的某个提交 commit hash 并推送远程分支?

问题 如下图,我要回退到 【002】Babel 的编译流程 这一次提交 解决 1、先执行下面命令,输出日志,主要就是拿到提交 commit 的 hash,上图红框即可 git log或者 vscode 里面直接右击,copy sha 2、执行下面命令回退 g…

条件格式实例

import pandas as pd import numpy as np import datetime todaystr(datetime.date.today())filepath/Users/kangyongqing/Documents/kangyq/202311/班均及合班储备/z拆班校验/ file102查询结果.csv file2工具-国家对应大洲表格_副本.xlsxdf1pd.read_csv(filepathfile1,dtypeob…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

OpenHarmony音视频—opus

简介 Opus是一种用于在互联网上进行交互式语音和音频传输的编解码器。它可以从低比特率窄带语音扩展到非常高的高品质立体声音乐。 下载安装 直接在OpenHarmony-SIG仓中搜索opus并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的opus库代码存在以下路径&a…

猿人学内部练习平台6~10题

第六题:session保持检测 使用session请求即可:session = requests.Session() 第七题:请求规律检测1-post 根据请求接口找规律,在每一页请求前请求一次https://www.python-spider.com/cityjson即可 requests.post(https://www.python-spider.com/cityjson, verify=False) re…

Sound Siphon for Mac:音频处理与录制工具

Sound Siphon for Mac是一款专为Mac用户设计的音频处理与录制工具,以其出色的性能、丰富的功能和简便的操作而备受赞誉。 Sound Siphon for Mac v3.6.8激活版下载 该软件支持多种音频格式,包括MP3、WAV、AAC、FLAC等,用户可以轻松导入各种音频…

qt 使用hid开源库 ,搜索所有的hid设备

效果: cmakeLists.txt :cmake_minimum_required(VERSION 3.5)project(TF_Hid_UseANDTest VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)file(GLOB include…

在PostgreSQL中如何创建和使用自定义函数,包括内置语言(如PL/pgSQL)和外部语言(如Python、C等)?

文章目录 一、使用内置语言 PL/pgSQL 创建自定义函数示例代码使用方法 二、使用外部语言 Python 创建自定义函数安装 PL/Python 扩展示例代码使用方法 三、使用外部语言 C 创建自定义函数编写 C 代码编译为共享库在 PostgreSQL 中注册函数注意事项 总结 PostgreSQL 是一个强大的…

上班族必备的便签备忘录app 好用的便签备忘录软件

上班族每天都需要处理大量的工作事项,从策划方案到客户沟通,每一个环节都至关重要。然而,仅仅依靠大脑记忆,很容易遗漏某些细节,甚至可能错过重要的截止日期。为了避免这种情况,许多人选择使用一款优秀的便…

探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义

DTD 是文档类型定义(Document Type Definition)的缩写。DTD 定义了 XML 文档的结构以及合法的元素和属性。为什么使用 DTD 通过使用 DTD,独立的团体可以就数据交换的标准 DTD 达成一致。 应用程序可以使用 DTD 来验证 XML 数据的有效性。 内部 DTD 声明 如果 DTD 在 XML 文件…