当前位置: 首页 > news >正文

ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解

前言

在现代前端开发中,代码质量与一致性是至关重要的,ESLint 正是为此而生的一款强大工具,本文将带您详细了解 ESLint 的配置文件,并通过通俗易懂的方式讲解其主要配置项及其配置方法。此外,我们还将探讨一些高级配置和最佳实践,以帮助您在项目中更好地应用 ESLint,提升代码质量和开发效率。

ESLint 配置文件格式

ESLint 的配置文件可以是以下几种格式之一:

  1. JavaScript (.eslintrc.js)
  2. JSON (.eslintrc.json)
  3. YAML (.eslintrc.yaml 或 .eslintrc.yml)
  4. 配置文件名也可以是 package.json 中的 eslintConfig 字段

配置文件优先级

当 .eslintrc.js、.eslintrc.json、.eslintrc.yaml 或 .eslintrc.yml 以及 package.json 同时存在时,ESLint 会按照一定的优先级顺序加载配置文件。优先级顺序如下:

  1. JavaScript 文件:.eslintrc.js
  2. YAML 文件:.eslintrc.yaml 或 .eslintrc.yml
  3. JSON 文件:.eslintrc.json
  4. package.json 文件中的 eslintConfig 字段
    简而言之,ESLint 会首先查找 .eslintrc.js 文件,如果找到了就会使用它并忽略其他配置文件。如果没有找到 .eslintrc.js 文件,则会继续查找 .eslintrc.yaml 或 .eslintrc.yml 文件,以此类推。

配置文件的基本结构

这里我们主要以 .eslintrc.js 为例,其他格式的配置方法类似,只是语法不同。一个简易的 .eslintrc.js 配置文件可能是这样的:

module.exports = {"env": { /* 环境配置 / },
*  "extends": [ /* 继承的规则 / ],
*  "plugins": [ /* 插件列表 / ],
*  "rules": { /* 具体的规则配置 / },
*  "parserOptions": { /* 解析器选项 / },
*  "globals": { /* 全局变量 / },
*  "settings": { /* 特定插件的设置 */ }
};

具体配置项

1. env(环境配置)

env 配置指定你将在哪种环境中运行代码,比如浏览器、Node.js 或是其他环境。

module.exports = {env: {browser: true, // 浏览器环境node: true,    // Node.js 环境es6: true      // ES6 语法}
};

这样 ESLint 就知道你的代码可能会使用哪些全局变量或特性。

2. extends(继承的规则)

extends 用于继承已有的配置。这可以帮助你快速使用社区标准而不需要自己配置所有规则。

module.exports = {extends: ["eslint:recommended", // 官方推荐的 ESLint 规则"plugin:react/recommended" // React 插件推荐规则]
};

你可以继承多个配置,它们会依次覆盖。

3. plugins(插件列表)

plugins 配置额外的插件。插件可以提供额外的规则或配置选项。

module.exports = {plugins: ["react", // 使用 eslint-plugin-react"jsx-a11y" // 使用 eslint-plugin-jsx-a11y]
};

插件本身不会生效,必须在 rules 中启用相应的规则。

4. rules(规则配置)

rules 是 ESLint 的核心部分,用于指定具体的代码检查规则。

module.exports = {rules: {"no-console": "warn", // 禁止使用 console.log,警告提示"eqeqeq": ["error", "always"], // 要求使用 ===!==,错误提示"react/jsx-uses-react": "error", // 特定于 react 的规则"react/jsx-uses-vars": "error" // 确保 JSX 变量被正确使用}
};

规则通常有三种配置方式:“off”、“warn”、“error”,分别表示关闭、警告和错误。

5. parserOptions(解析器选项)

parserOptions 用于指定 JavaScript 语言选项,能使 ESLint 正确解析你的代码。

module.exports = {parserOptions: {ecmaVersion: 2020, // 支持 ES2020 语法sourceType: "module", // 使用 ES模块ecmaFeatures: {jsx: true // 启用 JSX 支持}}
};

6. globals(全局变量)

globals 用于声明项目中使用的全局变量,以避免 ESLint 报未定义变量的错误。

module.exports = {globals: {jQuery: "readonly", // jQuery 是只读全局变量process: "writable" // process 是可写全局变量}
};

7. settings(特定插件的设置)

settings 用于传递给特定插件的配置数据。这在使用某些插件时非常有用。

module.exports = {settings: {react: {version: "detect" // 自动检测 React 版本}}
};

8. overrides(覆盖配置)

overrides 允许你针对特定文件或目录设置不同的规则。这在大型项目或多语言项目中非常有用。

module.exports = {overrides: [{files: ["*.ts", "*.tsx"], // 针对 TypeScript 文件parser: "@typescript-eslint/parser", // 使用 TypeScript 解析器plugins: ["@typescript-eslint"],extends: ["plugin:@typescript-eslint/recommended" // 使用 TypeScript 推荐规则],rules: {"@typescript-eslint/no-unused-vars": "error" // TypeScript 专用规则}},{files: ["*.test.js"], // 针对测试文件env: {jest: true // 启用 Jest 全局变量}}]
};

通过 overrides,你可以根据文件类型、目录或任何符合条件的模式来应用不同的 ESLint 配置。

9. ignorePatterns(忽略文件)

ignorePatterns 允许你指定 ESLint 应忽略的文件或目录。这些文件将不会被 ESLint 检查。

module.exports = {ignorePatterns: ["node_modules/", "dist/", "build/"]
};

你也可以使用 .eslintignore 文件来指定忽略的文件或目录,类似于 .gitignore 的用法。

10. parser(指定解析器)

parser 选项允许你指定用于解析代码的解析器。默认的解析器是 espree,但你可以使用其他解析器,例如 @babel/eslint-parser 或 @typescript-eslint/parser。

module.exports = {parser: "@babel/eslint-parser",parserOptions: {babelOptions: {configFile: "./babel.config.json" // Babel 配置文件路径}}
};

11. root(根配置)

root 选项用于告诉 ESLint 当前配置文件是项目的根配置文件,防止 ESLint 在父目录中查找其他配置文件。对于多层目录结构的项目,这个选项非常有用。

module.exports = {root: true
};

12. noInlineConfig(禁止内联配置)

noInlineConfig 选项用于禁止在代码中使用内联配置(如 eslint-disable 注释),这可以确保所有的规则都必须在配置文件中定义。

module.exports = {noInlineConfig: true
};

使用技巧

1. 使用共享配置

在团队协作中,为了保持代码风格一致,可以使用共享配置包。例如 eslint-config-airbnb,只需安装并在 extends 中引用即可。

npm install eslint-config-airbnb --save-dev

然后在配置文件中:

module.exports = {extends: ["airbnb"]
};

2. 与 Prettier 集成

Prettier 是一个代码格式化工具,通常与 ESLint 一起使用以确保代码风格一致。可以使用 eslint-plugin-prettier 和 eslint-config-prettier 来集成两者。

npm install eslint-plugin-prettier eslint-config-prettier --save-dev

配置文件:

module.exports = {extends: ["eslint:recommended","plugin:prettier/recommended"],rules: {"prettier/prettier": "error"}
};

3. 使用自动修复

ESLint 提供了自动修复功能,可以通过命令行参数 --fix 自动修复一些简单的问题:

eslint . --fix

这样可以节省开发时间,并确保代码风格的一致性。

总结

通过本文的深入讲解,我们不仅了解了 ESLint 配置文件的基本结构和各个配置项,还探索了一些高级配置和实用技巧。希望这些内容能帮助你更好地使用 ESLint,提高代码质量和开发效率。

相关文章:

ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解

前言 在现代前端开发中,代码质量与一致性是至关重要的,ESLint 正是为此而生的一款强大工具,本文将带您详细了解 ESLint 的配置文件,并通过通俗易懂的方式讲解其主要配置项及其配置方法。此外,我们还将探讨一些高级配置…...

如何将 EDB 文件导入 Ansys HFSS 和 Ansys Q3D

EDB 文件包含有关印刷电路板 (PCB) 的基本数据,包括其布局、组件、连接性和电磁属性。将 EDB 文件导入 Ansys 工具是利用仿真和分析功能设计高效、可靠和高性能电子系统的关键步骤。在这里,我将向您展示如何将 EDB 文件导入 Ansys…...

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景: 运行的是h5,模拟器是网易MuMu。 首先检查一下是否配置dab环境,adb version 配置一下hbuilderX的adb: 将命令输出的路径配置到hbuilderx里面去,然后重启下HbuilderX。 开始安装基座…一直安装不…...

智慧流控 力行天地 | 同元软控受邀参加第十三届全国流体传动与控制学术会议

2024年10月27日-30日,由中国机械工程学会流体传动与控制分会主办的第十三届全国流体传动与控制学术会议在秦皇岛召开。大会以“智慧流控 力行天地”为主题,来自全国高校、科研院所及企事业单位的专家学者出席本次会议。 大会围绕工程应用、新型流控元件、…...

Python日志分析与故障定位

Python日志分析与故障定位 目录 📊 分布式系统日志分析:ELK Stack与Fluentd⚡ 实时日志流处理与异常检测🐍 使用Python分析并处理海量日志数据🚨 自动化故障检测与报警系统🔍 故障根因分析(Root Cause An…...

w029基于springboot的网上购物商城系统研发

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件&#xff0…...

Uniapp全局文件执行顺序详解

Uniapp全局文件执行顺序详解 在Uni-App项目中,全局文件的执行顺序对于深入理解应用的启动和初始化流程至关重要。本文将详细阐述这些文件的执行顺序,并提供相应的示例代码,以便开发者更好地理解和应用。 1. index.html 文件描述&#xff1…...

车企死亡加速,买车看好这三条线

文 | AUTO芯球 作者 | 雷慢 真不是我危言耸听, 新能源车是真不能随便买啊, 就在这几天,哪吒被传出要裁员70%, 多少车主,多少员工和家庭要失眠了, 哪吒也回应了,说没有裁员,只是精…...

SpringClud一站式学习之Eureka服务治理(二)

SpringClud一站式学习之Eureka服务治理 引言1. 搭建Eureka Server1.1. 添加Eureka Server依赖1.2. 添加 Eureka Server注解1.3. 配置Eureka Server1.4. 运行Eureka Server 2. 搭建Eureka Client 服务提供者2.1. 添加依赖2.2. 添加注解2.3. 配置Eureka Client2.4. 启动服务 3. 搭…...

空间解析几何【上】

文章目录 两向量共线&三向量共面线段定比分点内积&外积&混合积内积(点积)外积(叉积)几何性质混合积轮换对称性对换改变一次符号线性性质几何性质球面方程特点空间平面参数方程行列式方程(点位式)向量式方程三点式方程行列式方程点法式一般式截距式法式方程离…...

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面,每个页…...

独孤思维:曾经副业赚大钱的人,怎么不见了

01 总有一双眼睛默默关注你。 别以为自己每天做项目,日更文章,没人看。 总会有人默默观察你。 看你能坚持多久,看多段时间,你是不是还在。 今天上午,有个2年前认识的副业同行,今天突然跟我发消息。 说…...

OpenGL 异常处理-glCreateShader失败

【1】glCreateShader创建顶点着色器时候报错,如下 【2】原因分析 初始化失败,你使用一个扩extension loader library来访问现代OpenGL,当需要初始化它时,加载器需要一个当前的上下文来加载 【3】解决办法 GLenum glew_err gle…...

【el-pagination的使用及修改分页组件的整体大小修改默认样式的宽度详细教程】

今天遇到个bug,使用element-puls中的分页的时候,长度会超出盒子,今天教大家如何修改el-pagination的宽度,以及修改分页组件的整体大小 直接修改 style"width: 100%; margin-top: 10px"不生效 控制台修改el-pagination…...

Uniapp的学习

uniapp的内容和vue网页开发会有很多区别,但是都是基于vue开发的,大多数业务还是在vue打交道,但是这些uniapp的特殊的知识点也是要掌握好的。 基本配置 创建uniapp项目 npx degit dcloudio/uni-preset-vue#vite-ts 项目名 :用于…...

C#-万物之父object、装箱拆箱

万物之父:object 基于里氏替换原则,可以用object容器装载一切类型的变量。可以用来表示不确定类型,作为函数参数类型 object是所有类型的基类 装箱拆箱 用object存值类型(装箱)→ 把值类型用引用类型存储,…...

AI大模型重塑软件开发流程:从自动化编码到智能协作的未来展望

目录 1. 引言:AI大模型的崛起与软件开发的变革 1.1 AI大模型的兴起与发展背景 1.2 软件开发的现状与痛点 1.3 AI大模型如何解决这些问题 2. AI大模型的工作原理与技术背景 2.1 什么是AI大模型? 2.2 深度学习与自然语言处理技术的演变 2.3 大模型…...

HTB:GreenHorn[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 再次使用nmap对这三个端口进行脚本、服务扫描 尝试先通过curl访问靶机80端口 将靶机IP与该域名写入hosts使DNS本地解析 使用浏览器访问greenhorn.htb 使用Wappalyzer插件查看该页面技术栈 尝试在sea…...

SelfAttention在Ascend上的实现

1 SelfAttention是什么? Self-Attention(自注意力)机制是深度学习领域的一种重要技术,尤其在自然语言处理(NLP)任务中得到广泛应用。它是 Transformer 架构的核心组成部分之一,由 Vaswani 等人…...

C#设计模式

文章目录 项目地址一、开放封闭原则1.1 不好的版本1.2 将BankProcess的实现改为接口1.3 修改BankStuff类和IBankClient类二、依赖倒置原则2.1 高层不应该依赖于低层模块2.1.1 不好的例子2.1.2 修改:将各个国家的歌曲抽象2.2 抽象不应该依于细节2.2.1 不同的人开不同的车(接口…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...