ESLint 配置入门

news2025/7/19 15:42:53

大家好,我是前端西瓜哥,今天带大家了解 ESLint 的配置项。

ESLint 是一款检查 JavaScript 程序是否符合特定的规则的工具。比如字符串用单引号还是双引号,tab 缩进用 2 个空格还是 4 个空格还是其他,这些都可以用 ESLint 来规定。

安装

你可以通过下面命令来安装以及生成默认的 ESLint 配置

npm init @eslint/config

执行后,它有一个命令行的交互,根据提问需要选择即可。

图片

然后你会得到一个 .eslintrc.json 或者 .eslintrc.js 或 .eslintrc.yaml 文件(根据你的选择)。

我没有使用一些流行的默认 eslint 配置包,选择了自定义规则。我的 .eslintrc.json 文件是这样的:

{
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:@typescript-eslint/recommended"
    ],
    "overrides": [
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "@typescript-eslint"
    ],
    "rules": {
        "indent": [
            "error",
            4
        ],
        "linebreak-style": [
            "error",
            "unix"
        ],
        "quotes": [
            "error",
            "single"
        ],
        "semi": [
            "error",
            "always"
        ]
    }
}

除了有专门的 ESLintrc 文件,我们 还可以在 package.json 加配置,字段名为 “eslintConfig”。

此外,ESLint 还支持 配置注释。如果一个文件的某行代码或所有代码的某个规则要做特殊处理,我们可以在文件上加上注释。

比如整个文件关闭 semi(分号)规则:

/* eslint-disable semi */

下一行关闭 semi(分号)规则:

// eslint-disable-next-line semi
const a = '前端西瓜哥'

检验和修复文件规则

可以通过下面命令来检查一个文件是否符合规则:

npx eslint src/index.js
# 或者
yarn run eslint src

每次写完代码都要执行命令的话,不免开发体验差。

强烈建议在编辑器中装上插件,它可以直接在代码的位置上提示错误并提供信息。如果你使用的是 VSCode,可以安装 ESlint 插件。

图片

修复指定文件的规则,在原来命令的基础上加上 --fix 即可。

npx eslint src/index.js --fix

VSCode 则可以通过智能提示的 Quick Fix 自动修复。

图片

需要注意的是,并不是所有的规则错误都可以 auto fix

像是双引号变成单引号 ESLint 可以帮你 fix,但对于函数的内容为空,你需要加上内容的情况,ESLint 没办法帮你写出来,它也不知道你想写啥。

图片

此外,还有存在多个可选修复方案的情况,你需要在编辑器的 quick fix 中选择一种。

配置项 rules

下面我们看看 eslintrc 的一些配置用法。

rules 配置里可以指定一些具体的规则。比如

"indent": ["error", 4]

注释配置写法:

/* eslint indent: ["error", 4] */

表示我们希望缩进为 4 个空格。

数组的第一个元素是错误等级。分为

  1. off / 0:关闭规则;

  2. warn / 1 :警告等级,配合其他工具时表现为编译通过,但会出现警告,在 VSCode 使用插件后显示为黄色波浪线;

  3. error / 2:错误等级,表现为编译不通过(exit code 为 1),在 VSCode 使用插件后显示为红色波浪线。

第二个元素及以后则是具体的配置值。

indent 是 rules 的一种规则,具体还有其他什么规则你可以看 eslint 官方文档:

https://eslint.org/docs/latest/rules/

配置项 plugins

plugins 可以给 ESLint 新增一些规则。比如 eslint-plugin-react 插件:

"plugins": [
  "react"
],
"rules": {
  // props 不能使用字面量布尔值
  // 比如 disabled={true} 是不允许的,需要用 disabled
  "react/jsx-boolean-value": [
    "error",
    "never"
  ]
}

但注意它只是声明,而不会应用这些规则,你需要在 rules 上应用,或使用 extends。

配置项 extends

extends 是集成好的一套完整方案,里面会预先设好 plugins、rules 等配置。你可以认为它是另一个 eslintrc 文件。

"extends": [
  "eslint:recommended",
  "plugin:@typescript-eslint/recommended"
]

上面使用了 ESLint 自带的 eslint:recommended,里面设置了一些默认 rule。源码地址在这里:

https://github.com/eslint/eslint/blob/main/conf/eslint-recommended.js

每次开发一个新的项目,如果一个个配置 rule 未免繁琐,通常我们会选择一个比较流行的去 extends,然后再在上面修改。

当然你也可以自己开发一个。

配置项 env

设置脚本环境。比如

"env": {
    "browser": true,
    "es2021": true
},

注释配置写法:

/* eslint-env browser, es2021 */

env 可以指定多个环境。

env 对一些 rule 是有作用的,比如 no-undef,表示不能使用未定义的变量。但有些变量其实是脚本所在宿主环境提供的全局变量,比如浏览器的 window,nodejs 的 process。

提供了 env 后,ESLint 就能有一个环境变量的白名单,看到这些变量就跳过 no-undef 规则。

可选的环境值:

https://eslint.org/docs/latest/user-guide/configuring/language-options#specifying-environments

配置项 global

设置全局变量。

"globals": {
  "var1": "writable",
  "var2": "readonly",
  "var3": "off",
}

  • writable:表示可修改;

  • readonly:表示只读,不能修改;

  • off:关闭

配置注释写法:

/* global var1: writable, var2: readonly */

配置项 root

设置应用配置文件的根目录

"root": true

对项目中的某个文件的 ESLint 应用逻辑是,从它所在目录往上递归,找到所有的 ESLintrc 文件,直到根目录 /

通常我们希望递归到项目根目录就停止了,不要引入项目外的 ESLintrc。

这时候我们就可以用 “root” 进行标明,表示到这里就是根目录了。

配置项 parserOptions

ESLint 默认使用 ES5 的语法来解析代码。如果你的代码 用了高版本的 ES,就要配置 parserOptions,指定转换 AST 所基于的版本

"parserOptions": {
  "ecmaVersion": "latest",
  "sourceType": "module",
  "ecmaFeatures": {
    "jsx": true
  }
},

子配置项有:

  1. ecmaVersion:ES版本,可以是 3、5(默认)、6(或 2015)、7(或 2016)… “latest”(当前 ESLint 支持的最新版本)

  2. sourceType:可以设置为 “script” (默认) 或 “module”(使用模块化)

  3. allowReserved:允许使用保留字来作为变量名(如果是 ES3)

  4. ecmaFeatures:添加新的语言特性。它是一个对象,包括 jsx、impliedStrict(启用全局的 “use strict;”)、globalReturn(全局作用域可以 return,像 commonjs 模块本质是用函数实现的)。

配置项 parser

ESLint 默认的 parser 只支持 js,且仅支持最终的 ES 标准,不支持实验性质的特性。

有时候我们想用实验性质的 ES 特性,或是使用另一种语言,比如 TypeScript,那就要更换 parser 了。

对于实验性质特性,我们可以使用 babel:

"parser": "@babel/eslint-parser"

对于 TypeScript:

"parser": "@typescript-eslint/parser"

保存时自动格式化

这个需要借助编辑器的插件,在保存的时候调用 ESLint 的 fix API。

比如在 VSCode 中,我们只需要在 .vscode/settings.json 配置:

{
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  }
}

更多的用法可查阅插件的官方文档:

https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint

.eslintignore

有些文件我们不希望做 eslint 检验,因为它们可能是通过脚本生成的文件。

我们可以在项目根目录创建一个 .eslintignore 文件.

dist/*
lang/zh_ch.js

结尾

之后我会开一篇文章写如何编写自定义 ESLint 规则,敬请期待。

我是前端西瓜哥,欢迎关注我,学习更多前端知识。

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

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

相关文章

微信小程序---分包操作

有时候我们的小程序太大,首次打开小程序的时候回比较慢,这个时候我们可以试试分包操作。分包可以让用户在操作小程序的时候按需下载资源(用户在进入某些页面的时候才去下载相应的资源,可以加快小程序的速度,优化用户体…

前端学习笔记(15)-Vue3状态管理store及Vuex的使用

1.状态管理 2.用响应式API做简单状态管理 3.Vuex基础 4.Vuex 核心概念 5. VuexsessionStorage实现数据存储1.状态管理理论上来说&#xff0c;每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例&#xff1a;<script setup> impor…

最新小程序反编译详细教程,亲测可用

小程序因为触手可及、自带推广等的特点&#xff0c;自诞生以来&#xff0c;实现了很多的商业场景&#xff0c;同时取代了App的大部分市场份额。其实小程序的开发和网页开发类似&#xff0c;同样使用的是JavaScript开发的&#xff0c;属于前端&#xff0c;所以借助一些程序的帮助…

html+css唯美登录页面,代码提供(效果展示)

文章目录效果图所有代码效果图 所有代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" cont…

vue脚手架报错:“Component name “***“ should always be multi-word”解决方法

出现的问题 在我们写完脚手架运行 npm run serve 后控制台报错 页面报错 报错的原因 在为自定义组件命名的时候未按照官方代码规范进行命名&#xff0c;根据 ESLint 官方代码风格指南&#xff0c;除了根组件&#xff08;App.vue&#xff09;以外&#xff0c;其他自定义组件命名…

若依框架登录后跳转其他页面获取不同的菜单登录进入后跳转至动态路由的第一个路由

最近碰到的需求是登录进入后,先跳转至一个自己定义的页面,在这个页面选择一个系统后,进入若依的系统,根据选择的系统获取相应的菜单,进入页面后默认跳转至后端返回的动态路由的第一个路由 1.首先在登录页面login.vue做如下改动 写成你要跳转过去的页面:(这个路由如果是自己定…

蓝桥杯冲击-02约数篇(必考)

文章目录 前言 一、约数是什么 二、三大模板 1、试除法求约数个数 2、求约数个数 3、求约数之和 三、真题演练 前言 约数和质数一样在蓝桥杯考试中是在数论中考察频率较高的一种&#xff0c;在省赛考察的时候往往就是模板题&#xff0c;难度大一点会结合其他知识点考察&#x…

安装element ui

安装element ui记录 步骤 1.先在dev控制台输入npm i element-ui --save 2.出现警告 F:\vue_test\src> npm i element-ui --save npm WARN deprecated core-js2.6.12: core-js<3.23.3 is no longer maintained and not recommended for usage due to the number of is…

Vue项目实战——实现一个任务清单(学以致用,两小时带你巩固和强化Vue知识点)

Vue2.x 项目实战&#xff08;一&#xff09; 内容参考链接Vue2.x全家桶Vue2.x 全家桶参考链接Vue2.x项目&#xff08;一&#xff09;Vue2.x 实现一个任务清单Vue2.x项目&#xff08;二&#xff09;Vue2.x 实现GitHub搜索案例Vue3.x项目&#xff08;三&#xff09;Vue3.x 实现一…

Vue 高德地图(@amap/amap-jsapi-loader)的基本使用:添加标记、POI关键字搜索、路线规划...(方法一)

高德地图的基本事件与使用前言&#xff1a; 引入并初始化渲染地图1、初始化地图2、地图鼠标点击事件3、添加标记、 移除标记点4、搜索服务——POI关键字搜索 [AMap.PlaceSearch]5、驾车路线规划服务5.1 可拖拽驾车路线规划 [AMap.DragRoute]5.2 途经点 &#xff08;起点 终点 途…

在vue3+ts项目里使用query和params传参

一 query 传参 &#xff08;类似get请求&#xff09; query 传参方式① 传递方组件 home.vue <template><div classc><p>query传参</p><el-button type"success" click"toList"> to list</el-button> </div>…

LayUI框架的使用步骤实现登录页面

目录 一、LayUI的简介 二、下载安装 三、引入并且测试 四、自定义模块 四、利用LayUI实现一个登录页面 一、LayUI的简介 1.1 什么是LayUI&#xff1f; Layui&#xff08;谐音&#xff1a;类 UI) 是一套开源的 Web UI 解决方案&#xff1b; 由国人开发&#xff08;作者贤心…

Python人脸识别

#头文件&#xff1a;import cv2 as cvimport numpy as npimport osfrom PIL import Imageimport xlsxwriterimport psutilimport time#人脸录入def get_image_name(name):name_map {f.split(.)[1]:int(f.split(.)[0]) for f in os.listdir("./picture")}if not name…

宇宙最强-GPT-4 横空出世:最先进、更安全、更有用

文章目录前言一、准确性提升1.创造力2.视觉输入3.更长的上下文二、相比于ChatGPT有哪些提升1.GPT-4 的高级推理能力超越了 ChatGPT2.GPT-4 在多种测试考试中均优于 ChatGPT。三、研究团队在GPT-4模型都做了哪些改善1.遵循 GPT、GPT-2 和 GPT-3 的研究路径2.我们花了 6 个月的时…

2022年Web前端开发流程和学习路线(详尽版)

前言 前端侧重于人机交互和用户体验&#xff0c;后端侧重于业务逻辑和大规模数据处理。理论上&#xff0c;面向用户的产品里&#xff0c;所有问题&#xff08;包括产品、设计、后端、甚至看不见的问题&#xff09;的表现形式&#xff0c;都会暴露在前端&#xff0c;而只有部分…

JS防抖和节流

前言 在进行窗口的操作或者输入框操作时&#xff0c;如果事件处理函数用的频率无限制&#xff0c;会加重浏览器和服务器的负担&#xff0c;此时我们就可以用防抖&#xff08;debounce&#xff09;和节流&#xff08;throttle&#xff09;的方式来减少调用频率&#xff0c;同时…

简析强制缓存和协商缓存

零、目录 背景介绍 http 缓存机制 使用小结 一、 背景介绍 浏览器和服务器进行交互的过程&#xff0c; 时间开销的瓶颈往往出现在数据的传输的过程之中。 这个场景类似介于 A城 到 B城 之间只有一座 “通道” &#xff0c; 每次想从A城 到 B城 &#xff0c;必须按照人数交付高…

Maven使用教程(IDEA版)

目录 一、Maven简介 1.1 在项目中如何导入jar包&#xff1f; 1.2 传统导入jar包的方式存在什么问题&#xff1f; 1.3 项目生命周期 1.4 Maven简介 二、Maven安装及配置 2.1 Maven下载 2.2 Maven安装 2.3 配置环境变量 三、Maven的项目结构 3.1 Maven的项目结构 3.2…

【CSS】CSS 特性 ③ ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

文章目录一、CSS 优先级1、优先级引入2、选择器基本权重3、完整代码示例一、CSS 优先级 1、优先级引入 定义 CSS 样式时 , 可能出现 多个 类型相同的 规则 定义在 同一个元素上 , 如果 CSS 选择器 相同 , 执行 CSS 层叠性 , 根据 就近原则 选择执行的样式 , 如 : 出现两个 div…

VueX使用

vuex基本概念 vuex官方文档 vuex是vue的状态管理工具&#xff0c;状态即数据。 状态管理就是集中管理vue中 通用的 一些数据 注意&#xff08;官方原文&#xff09;&#xff1a; 不是所有的场景都适用于vuex&#xff0c;只有在必要的时候才使用vuex 使用了vuex之后&#xf…