ESLint 的一些理解

news2024/10/7 13:20:49

ESLint

ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。

为什么要使用ESLint

  1. 有的可以帮我们避免错误;
  2. 有的可以帮我们写出最佳实践的代码;
  3. 有的可以帮我们规范变量的使用方式;
  4. 有的可以帮我们规范代码格式;
  5. 用的可以帮我们更合适的使用新的语法;

没有使用ESlint 和使用ESLint 可能是这样:
在这里插入图片描述

ESLint 使用

安装:

npm install eslint --save-dev

配置文件

ESLint 支持几种格式的配置文件:

  • JavaScript - 使用.eslintrc.js 然后输出一个配置对象。
  • YAML - 使用 .eslintrc.yaml 或 .eslintrc.yml 去定义配置的结构。
  • JSON - 使用 .eslintrc.json去定义配置的结构,
  • ESLint 的 JSON 文件允许 JavaScript 风格的注释。
  • Deprecated - 使用.eslintrc,可以使 JSON 也可以是 YAML。
  • package.json - 在 package.json 里创建一个 eslintConfig属性,在那里定义你的配置。

如果同一个目录下有多个配置文件,ESLint 只会使用一个。优先级顺序如下:

优先级从高到底

  1. .eslintrc.js
  2. .eslintrc.yaml
  3. .eslintrc.yml
  4. .eslintrc.json
  5. .eslintrc
  6. package.json

.eslintrc.js 文件的基础配置
ESlint 被设计为完全可配置的,这意味着你可以关闭每一个规则而只运行基本语法验证,或混合和匹配 ESLint 默认绑定的规则和你的自定义规则,以让 ESLint 更适合你的项目。

parserOptions

指定你想要支持的 JavaScript 语言选项, 如设置 最新语法 2020 版本js选项,默认是 3,5

parserOptions: {
   ecmaVersion: 2020,
 }

env
一个环境定义了一组预定义的全局变量,环境并不是互斥的,所以你可以同时定义多个,启用的环境,设为true即可,
如:设置node环境和browser浏览器环境中的全局变量。

env: {
    node: true,
    browser:true
  },

root
默认情况下,ESLint 会在所有父级目录里寻找配置文件,一直到根目录, 一种情况除外 遇到root 配置并且为true,这样可以定制规则

 root: true

extends
扩展配置文件字段,一个配置文件可以被基础配置中的已启用的规则继承。
该字段支持两种方法配置

  1. 指定的一个字符串
    如:指定下面的字符串会启动推荐的规则
extends:"eslint:recommended"
  1. 字符串数组:每个配置继承它前面的配置
    如: 按照数组顺序继承
  extends: [
    'plugin:vue/vue3-recommended',
    '@vue/airbnb'
   ]

plugins
插件 是一个npm包,通常输出规则。插件也可以输出一个或多个命名的 配置, 通过npm 安装之后,在这里加载,需要使用还需配置rules。
比如:eslint-plugin-jquery 前缀可以省略 === jquery

plugins: [
    'eslint-plugin-jquery' // 或 jquery
  ],

rules

ESLint 附带有大量的规则,通过 rules 属性可以对规则 进行设置,规则名称:设置选项错误级别

“off” 或 0 - 关闭规则
“warn” 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)
“error” 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)
如: 禁止使用alert confirm prompt

rules:{
	"no-alert": 2 ,
	'no-new-func': 1 // 禁止对 Function 对象使用 new 操作符, 通过警告提示
}

rules:{
	"no-alert": 'error' ,
	'no-new-func': 'warn' // 禁止对 Function 对象使用 new 操作符, 通过警告提示
}

特点
1.内置规则和自定义规则共用一套规则 API。

2.内置的格式化方法和自定义的格式化方法共用一套格式化 API。

3.额外的规则和格式化方法能够在运行时指定。

4.用户可以将结果设置成警告或者错误。

5.每条规则都是各自独立的,可以根据项目情况选择开启或关闭。

ESLint 是如何工作的

基础原理:

  • ESLint 默认使用 Espree 解析 JavaScript。
  • ESLint 使用 AST 去分析代码中的模式
  • ESLint 是完全插件化的。每一个规则都是一个插件并且你可以在运行时添加更多的规则。

总的来说,ESLint 会遍历解析过后的 AST(抽象语法树),然后在遍历到「不同的节点」或者「特定的时机」的时候,触发相应的处理函数,然后在函数中,可以抛出错误,给出提示。细节如下图
在这里插入图片描述

vue项目中如何配置

上面的配置只能是原生的JavaScript语法,如果使用vue、react等框架,就需要引入框架相关的扩展,通过配置文件extends 和plugins等进行相关配置。

官网推荐 插件 eslint-plugin-vue
安装

npm install --save-dev eslint-plugin-vue

配置

extends: [
 plugin:vue/vue3-recommended
]

这样就启动了。vue3的 基本推荐格式校验规则,详细使用的规则对照官网
,自己也可以开启或者关闭一些和项目不符合的规则,如:

rules:
{
     'array-bracket-newline': ['error', { "minItems": 5}], // 数组超过五个值可以换行
     'arrow-spacing': "error", //箭头函数前后加空格 () => {}
}

自动修复
ESlint 提供了一些基础的自动修复功能。
如果使用的是vue 提供的脚手架执行
在package.json

 "lint": "vue-cli-service lint"

其他的可以这样配置

"lint": "eslint --fix --ext .js --ext .vue src/"

运行 下面代码就可以自动修复

  npm run lint

IDE VSCode 配置ESLint 实现边开发便识别规范

安装IDE ESLint 插件 就可以在开发时获得规范检查器的反馈。这同时也避免启动开发服务器时不必要的规范检查。
方法一
直接在 vscode 设置 或者 settings.json 默认配置。生产全局配置,在多项目中不推荐,最好是每个项目单独配置多人同时使用同一个套配置

方法二
项目单独使用的配置,在项目目录中新建 .vscode 文件夹, 新建 settings.json 文件, 这个配置大于默认配置,配置的内容是一样
配置内容:

{
 "eslint.enable": true, // 启用ESLint
  // 保存时自动修复eslint问题
  "editor.codeActionsOnSave": { //  保存是的操作
    "source.fixAll.eslint": true  // 自动修复
  },
   "eslint.validate": [   // 校验的格式
    "javascript",
    "javascriptreact",
    "html",
    "vue"
  ],

ESLint 实践应用api 网关

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

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

相关文章

Docker入门之使用Dockerfile 构建镜像(七)

文章目录1. 前言2. Docker file 核心要点2.1 注意事项2.2 Docker file 执行流程2.3 Docker Image、Docker file、Docker Container区别2.4 Dockerfile常用保留字指令2.4.1 FROM2.4.2 MAINTAINER2.4.3 RUN2.4.4 EXPOSE2.4.5 WORKDIR2.4.6 USER2.4.7 ENV2.4.8 ADD2.4.9 COPY2.4.1…

ansible 简单使用

运行过程 1.加载自己的配置文件,默认/etc/ansible/ansible.cfg; 2.查找对应的主机配置文件,找到要执行的主机或者组; 3.加载自己对应的模块文件,如 command; 4.通过ansible将模块或命令生成对应的临时py文…

OpenMMLab 实战营打卡 - 第 一 课

OpenMMLab 实战营打卡 - 第 一 课 复习下总忘的基础知识 卷积的通道数变化 前一层特征纬度(通道数)决定核的通道数 当前层输出的特征纬度,由核的数量决定 图像尺寸变化 padding 公式:H′H−K12pH^{\prime}H-K12 pH′H−K12p…

电源技术中的安森美 单通道电压电平转换器件FXLP34P5X 适合便携式应用方案

电源技术中的安森美 单通道电压电平转换器件FXLP34P5X 适合便携式应用方案 :输入转换器电源电压为VCC1,输出转换器电源电压为VCC。 该器件使用1.0V至3.6V的VCC值运行,主要用于要求超低功耗的便携式应用。内部电路由最小量的缓冲器级组成&…

普通大学生自学 JAVA 怎样才能进大厂?

前言 可以看一下现在大厂对于Java方面的要求 阿里 百度 腾讯 从上面可以看出,无论是阿里、百度亦或是腾讯对于Java方面的要求是比较高的,可以说要求的是一个全面,所以想要进入大厂,不能操之过急,需要先从基础做起&am…

php报错SERVER SENT CHARSET (255) UNKNOWN

配置文件PHP.ini修改打开; extension_dir "ext",修改成; extension_dir "./" ; On windows: extension_dir "自己php的存放路径\ext"2.打开extensionmsql.dll; For example, on Windows: ;extensionmsql.dll3.修改配置&#xff08…

五、Linux 用户管理常用命令

一、用户管理命令 - useradd 命令名称:useradd 命令所在路径:/usr/sbin/useradd 执行权限:root 功能描述:添加新用户 语法:useradd 用户名 二、用户管理命令 - userdel 命令名称:userdel 命令所在路…

创业青年张继群

中央广播电视总台 -专访-张继群简介: 张继群,1995年10月生,男,临沂大学硕士研究生在读,现临沂城投思索信息技术有限公司智慧城市事业部员工,作为农业专班成员主要从事网络安全、大数据等新一代信息技术的科…

nuxt3:postcss-pxtorem

一、理解postcsshttps://www.postcss.com.cn/1.1、PostCSS是一个用 JavaScript 工具和插件转换 CSS 代码的工具。1.2、增强代码可读性:利用从 Can I Use 网站获取的数据为 CSS 规则添加特定厂商的前缀。 Autoprefixer 自动获取浏览器的流行度和能够支持的属性&#…

如何录制电脑屏幕和声音?分享3个实用的方法,赶紧收藏

使用电脑录屏工具,可以帮助我们轻松录制电脑屏幕。有时候我们不仅仅需要录制电脑上的画面,还需要在录制画面的同时录入声音。那您知道如何录制电脑屏幕和声音吗?如何在录屏的时候录制电脑内部声音或者电脑外部声音?现在小编就给大…

操作系统—王道考研之计算机系统概述

by:星辰 课程视频链接:https://www.bilibili.com/video/BV1YE411D7nH 第 1 章 计算机系统概述 1.1 操作系统的基本概念 1.1.1 操作系统的概念、功能和目标 系统资源的管理者、提供接口、作为扩充机器、虚拟机 1.1.1.1 熟悉的操作系统举例 1.1.1.2 操作系统的层次结构 1.1.1…

5分钟了解 KubeGems 1.23 GA

KubeGems 是一款开源的企业级多租户容器云平台。围绕云原生社区,KubeGems 提供了多 Kubernetes 集群接入能力,并具备丰富的组件管理和资源成本分析功能,能够帮助企业快速的构建和打造一个本地化、功能强大且低成本的云管理平台。 KubeGems 发…

C 语言判断

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。下面是大…

爱情呼叫转移-深度广度遍历(中)

广度遍历和深度遍历可以结合吗? 可以的,例如经典的《爱情转移》 《爱情转移》是电影《爱情呼叫转移》的主题曲,《爱情呼叫转移》讲述了一个男人穿梭在12个女人之间的情感流浪,讨论的是夫妻相处之道。我当时还在想他到底爱谁。 …

java 设计原则

提示: 设计模式 文章目录一、软件设计原则1.开闭原则2.依赖倒置原则3.单一职责原则4.接口隔离原则5.迪米特法则6.里氏替换原则7.合成复用原则一、软件设计原则 1.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块…

Java:如何避免Java内存泄漏

Java的核心优势之一就是利用JVM(Java虚拟机),JVM是一种开箱即用的内存管理。你只管创建对象,Java的垃圾回收器帮你分配以及回收内存。然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的。为了避免内存泄…

别再焦虑了,进大厂没你想象的那么困难....

前段时间有个在小公司干了好多年的朋友离职了,想要拼一拼大厂,又觉得自己30多岁了,年级比较大,害怕人家不要。在我们的鼓励下,他选择字节跳动试试。面试总共花费了 20 天左右,包含了 4 轮电话面试、1 轮笔试…

微信小程序中使用Vant Weapp组件库

介绍Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本使用首先要提供npm支持使用npm安装:在小程序 package.json 所在的目…

css优先级、CSS盒模型、内边距padding、外边距margin、边框border、盒模型的计算及模式转换、三维盒子

一、css优先级 二、CSS盒模型 代码&#xff1a; 三 三、内边距padding <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title><style type"text/css">*{ /* 关闭系统默认设置的外…

elasticsearch中使用runtime fields

1、背景 在我们使用es的开发过程中可能会遇到这么一种情况&#xff0c;比如我们的线路名称字段lineName字段在设置mapping的时候使用的是text类型&#xff0c;但是后期发现需要使用这个字段来进行聚合操作&#xff0c;那么我们除了对索引进行reindex操作外&#xff0c;还有什么…