前言

对于 ESlint 这一块一直存在一些疑问,今天看到一个文章内容挺好的,这里拿来了。

一、eslint 安装

1、全局安装

npm i -g eslint

全局安装的好处是,在任何项目我们都可以使用eslint的全局命令进行代码规则操作,但是这对我们的意义并不大,后续会详细介绍;
全局安装之后,要求相关的eslint插件页必须全局安装,这对多人开发项目来说会比项目安装更加繁琐。所以,我们这里采用在项目上安装eslint:

2、项目安装

npm i -D eslint

3、编辑器安装

二、eslint 定义规则

1、创建 .eslintrc.js 文件

  • 可以使用 ./node_modules/.bin/eslint --init 创建文件
  • .eslintrc.* 文件支持 .js .yaml .yal .json等格式的配置文件,这里使用 .js文件
  • 在 package.json 里创建一个 eslintConfig 属性,在那里,同样可以定义你的配置
  • 如果 .eslintrc.js 和 package.json里的 eslintConfig 同时存在,则只读取 .eslintrc.js文件

2、eslint 选项说明

"root": true

默认情况下,ESLint 会在所有父级目录里寻找配置文件,一直到根目录。如果发现配置文件中有 “root”: true,它就会停止在父级目录中寻找。

  parserOptions: {
    parser: 'babel-eslint', // 解析器,默认使用Espree
    ecmaVersion: 6, // 支持es6语法,但并不意味着同时支持新的 ES6 全局变量或类型(比如 Set 等新类型)
    sourceType: 'module', // 指定来源的类型,"script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)
    // 使用的额外的语言特性
    ecmaFeatures: {
      jsx: true, // 启用 JSX
      globalReturn: true, // 允许在全局作用域下使用 return 语句
      impliedStrict: true, // 启用全局 strict mode (如果 ecmaVersion 是 5 或更高)
      experimentalObjectRestSpread: true, // 启用实验性的 object rest/spread properties 支持。(重要:这是一个实验性的功能,在未来可能会有明显改变。 建议你写的规则 不要 依赖该功能,除非当它发生改变时你愿意承担维护成本。)
    },
  }

解析器选项可以在 parserOptions 属性设置。设置解析器选项能帮助 ESLint 确定什么是解析错误,所有语言选项默认都是 false。如上:

  env: {
es6: true, // 启用 ES6 语法支持以及新的 ES6 全局变量或类型
node: true, // Node.js 全局变量和 Node.js 作用域
browser: true, // 浏览器全局变量
jquery: true, // jQuery 全局变量
}

使用 env 关键字指定你想启用的环境。如上:
更多环境设置请参考:https://cn.eslint.org/docs/user-guide/configuring#specifying-environments

  globals: {
template: false, // false 不允许被重写
_util: false,
}

当访问当前源文件内未定义的变量时,no-undef 规则将发出警告。如果你想在一个源文件里使用全局变量,推荐你在 ESLint 中定义这些全局变量,这样 ESLint 就不会发出警告了。如上:

  plugins: [
'html', // 此插件用来识别.html 和 .vue文件中的js代码
]

ESLint 支持使用第三方插件。在使用插件之前,你必须使用 npm 安装它。如:npm i -D eslint-plugin-html。在配置文件里配置插件时,可以使用 plugins 关键字来存放插件名字的列表。插件名称可以省略 eslint-plugin- 前缀。如上:

"extends": "eslint:recommended"

一个配置文件可以从基础配置中继承已启用的规则。如上,如果值为字符串数组则每个配置继承它前面的配置。值为 “eslint:recommended” 的 extends 属性启用了eslint默认的规则,请参考:https://cn.eslint.org/docs/rules/

  rules: {
indent: [2, 4], // 强制使用一致的缩进
eqeqeq: [2, 'always'], // 要求使用 === 和 !==
semi: [2, 'never'], // 要求或禁止使用分号代替 ASI
quotes: [2, 'single'], // 强制使用一致的反勾号、双引号或单引号
}
ESLint 附带有大量的规则。你可以在rules选项中设置,设置的规则将覆盖上面继承的默认规则。要改变一个规则设置,你必须将规则 ID 设置为下列值之一:

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

三、eslint 代码检测和修复

这里讲的是使用 eslint 命令行来操作,后续会讲到如何用编辑器提升代码效率

1、代码检测

项目根目录运行 eslint,检测指定文件,支持 glob 模式

./node_modules/.bin/eslint index.js

检测index.js文件,如下,有一个错误:多余的分号(基于semi规则)。并告诉我们此规则可以通过 --fix 命令修复。

指定文件后缀名

./node_modules/.bin/eslint --ext .js,.html src

目前,告诉 ESLint 哪个文件扩展名要检测的唯一方法是使用 --ext 命令行选项指定一个逗号分隔的扩展名列表。注意,该标记只在与目录一起使用时有效,如果使用文件名或 glob 模式,它将会被忽略。

2、代码修复

项目根目录运行:

./node_modules/.bin/eslint index.js --fix

会自动修复代码,当然不是所有的规则都能实现自动修复的,具体说明请参照:https://cn.eslint.org/docs/rules/

四、eslint更多配置方式

完整的 配置层次结构,从最高优先级最低的优先级,如下:

1、行内配置

/*eslint-disable*/ 、 /*eslint-enable*/
/*global*/
/*eslint*/
/*eslint-env*/

2、命令行选项

--global
--rule
--env
-c、--config

3、项目级配置

与要检测的文件在同一目录下的 .eslintrc.\* 或 package.json 文件
继续在父级目录寻找 .eslintrc 或 package.json文件,直到根目录(包括根目录)或直到发现一个有"root": true的配置。

4、如果不是(1)到(3)中的任何一种情况,退回到 ~/.eslintrc 中自定义的默认配置。

五、.eslintignore 忽略文件

1、定义及作用

在项目根目录创建一个 .eslintignore 文件告诉 ESLint 去忽略特定的文件和目录。

2、忽略规则

.eslintignore 文件是一个纯文本文件,其中的每一行都是一个 glob 模式表明哪些路径应该忽略检测。如:

/dist/
/*.js

eslint总是忽略 /node_modules/\* 和 /bower_components/\* 中的文件

3、用eslint命令检查忽略文件

./node_modules/.bin/eslint index.js

六、创建自己的规则风格文件

1、命名

eslint-config-* // 如:eslint-config-vui

2、上传

参照:发布一个自己的npm包

3、下载

npm i -D eslint-config-vui

4、使用

在继承规则 extends 属性中定义自己上传的规则名,可以忽略 eslint-config- 字符,如下:

extends: ['vui']

5、eslint-config-vui 规则源码地址

https://github.com/shiguang0116/eslint-config-vui

七、使用编辑器插件标识错误以及自动修复代码

为什么使用编辑器插件:上述讲到的使用 eslint 命令来检测和修复代码的操作显然非常繁琐,我们需要能够自动修复代码的工具,相关编辑器都提供了 eslint 插件。

参考:ESLint配置(二):vscode配置eslint,实现错误代码标识以及自动修复

八、使用构建工具检测代码

为什么:以上方式,包括后续讲到的使用编辑器修复代码,都只是自我书写代码的规范意识而已,在多人开发时如何强制性的要求提交的代码是符合我们自定的规范呢?这就需要在构建工具做相应的配置。

参考:ESLint配置(三):构建工具(webpack、gulp)配置eslint

转载自:ESLint 配置 (这里有系列文章可看)

Vue 项目中 ESlint 配置的更多相关文章

  1. rem的在vue项目中使用配置,,浏览器的兼容性之Mate标签

    在vue中配置rem 位置:在APP.vue的script中,在export default之外 (()=>{ let winW = document.documentElement.clien ...

  2. vue项目中全局配置变量

    在项目中api管理需要用到全局变量,创建全局变量的方式也有很多. 1.通过export default const BASEURL = "http://localhost:3333/&quo ...

  3. vue cli3 创建的项目中eslint 配置 问题的解决

    1--   vue cli3 项目文件结构 2-- 注释问题 在eslintrc.js 文件中,将 '@vue/standard' 注释后重启即可: 3-- 配置 eslint 文件 在 vue-cl ...

  4. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

  5. 在vue项目中如何添加eslint

    随着vue的越做越好,更多的开发者选择使用vue,本篇记录如何在vue项目中添加eslint. 首先第一种就是在vue项目创建初始时就选择了创建,随着初始化一起代入到了项目当中,那么要是一开始觉得es ...

  6. vue项目中postcss-pxtorem的使用及webpack中的配置 css中单位px和em,rem的区别

    移动手机版要求我们在制作嵌入h5的时候去适配不同的手机.适配有多重模式,有flex.百分比等.字体大小的控制也有px.百分比.rem等单位,webpack中 px转rem. vue项目中postcss ...

  7. 在vue项目中的axios使用配置记录

    默认vue项目中已经安装axios,基于element-ui开发,主要记录配置的相关. axiosConfig.js import Vue from 'vue' import axios from ' ...

  8. 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap

    1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...

  9. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

随机推荐

  1. ArcGIS Server 10.2忘记用户名密码的解决方案

    忘记了ArcGIS Server Manager的密码,可以采用以下方法进行重置. 1.找到ArcGIS Server的安装目录 D:\Program Files\ArcGIS\Server\tool ...

  2. 【Spring Boot学习之六】Spring Boot整合定时任务&异步调用

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2一.定时任务1.启动类添加注解@EnableScheduling 用于开启定时任务 package com.wjy; i ...

  3. Vue 搭建项目

    Vue  搭建项目 一.node下载安装: 1.下载:https://nodejs.org/en/download/ 2.安装默认许选择,下一步就行: 3.安装完之后就可以使用npm命令 二.通过@v ...

  4. prototype和__proto__的关系是什么?

    我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就 ...

  5. turtle1

    #画风车 from turtle import * pensize(2) for i in range(4): seth(360-i*90) fd(150) rt(90) circle(-150,45 ...

  6. Python实现字典树

    字典树,又称单词查找树,Trie 树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串 ...

  7. .net 生成非托管代码

    最近在一个老外的程序中看到一段代码,其中使用了System.Runtime.InteropServices.MarshalAs方法进行托管代码与非托管代码之间封装数据,感觉很新颖.特意记录下来,供大家 ...

  8. redis 缓存穿透、击穿、雪崩

    缓存穿透: 大量查询 redis 中不存在的key(用随救数进行查询),导致每次都会去查询数据库,造成数据库压力过大(甚至宕机). 解决办法: 1.对我们的 api 接口 进行限流处理.用户授权.黑名 ...

  9. js 杂症,this with 变量提升

    一.this.xx 和 xx 是两回事 受后端语言影响,总把this.xx 和xx 当中一回事,认为在function中,xx 就是this.xx,其实完全两回事: this.xx 是沿着this 原 ...

  10. JS构造函数new的过程

    造函数其实和普通函数本质上并无区别,唯一的区别有两个: 函数首字母大写,这个区别只是约定俗成的,便于区分.你实在要小写定义构造函数也完全没问题,所以这个区别可以忽略. 构造函数的调用需要用new操作符 ...