写在最前:本文是通过ESlint官网的配置文档得来,有大部分内容都是官网摘抄,此文章只是本人总结使用,如果理解错误望指出,以免误人子弟。
#Eslint 可以做什么
- 静态分析,代码检查
- 可以创建检验规则,规范代码格式
- 所有的都是可拔插的
- 内置规则和自定义规则共用一套规则API
- 内置格式化方法和自定义的格式化方法共用一套格式化API
- 额外的规则和格式化方法能在运行时制定
- 规则和对应的格式化方法并不强制捆绑使用
可配置的内容与配置项
- 制定脚本的运行环境,每种环境都有一组特定的预定义全局变量
- 脚本在执行期间访问的额外的全局变量
- 启用的规则和各自的错误级别
配置项:
parserOptions
- ecmaVersion配置使用的ECMA语法版本
- sourceType 设置为script或者module 也就是js脚本模式和模块
- jsx 启用JSX模式
parser
eslint默认使用Espree解析器,可以配置不同的解析器,解析器应该符合要求:
- 必须是一个Node模块,可以冲它出现的配置文件中加载,是指他是一个npm安装包。
- 符合解析器接口parser Interface eslint包含三个默认解析器:
- esprima
- babel-eslint 对babel解析器的包装,使其能够与eslint兼容
- @typescript-eslint/parser 将TS转换成与estree兼容的形式,一边在eslint中使用 **在使用自定义解析器时,为了parserOptions是必须配置的。解析器会被传入parserOptions,但是不一定会使用他们来决定功能特性的开关。
plugins
插件的作用:插件可以提供处理器,处理器可以从另外一种文件中提取JS代码,然后让ESlint检测JS代码,或者处理器可以在与处理中减缓JS代码。
一个插件中可能会具有多个处理器,通常可能只用到其中一种,如果只用到其中一种,可以使用processor键,或者我们想指定的某个文件或某种文件,那么就应该使用overrides属性:
{
plugin: ['a-plugin'],
processor: 'a-plugin/a-processor'
}
{
"plugins": ["a-plugin"],
"overrides": [
{
"files": ["*.md"],
"processor": "a-plugin/markdown"
}
]
}
也支持一些第三方插件,在使用第三方插件需要使用npm进行安装。插件可以省略插件的前缀名'eslint-plugin-'
plugins: [
'plugin1'等同于'eslint-plugin-plugin1'
]
env 指定执行环境
执行环境代表了一组预定义的全局变量,比如borwser中包含window或者document对象,比如node就包含process和module对象,比如测试环境的jest的全局变量,jquery的全局变量等等,都是通过指定环境从而在编码文件中可以使用某些全局的变量。
可以同时指定多个执行环境,比如可以同时指定浏览器环境和node环境。
{
env: {
browser: true,
node:true
}
}
也可以指定某个插件中使用使用某种环境,那么就可以这样配置:
{
plugin: ['a-plugin'],
env: {
example/node: true
}
}
globals 设置全局变量
当JS代码中需要使用一些非本文件声明的全局变量时,就可以使用globals属性,同时可以设置变量的级别,是否可写writable和只读readonly
{
globals:{
var1: 'writable',
var2: 'readonly'
}
}
rules
语法规则,也就是用来规范代码的比如可以使用只使用单引号的规则方式。
{
rules: {
quotes:[1,'double']//当双引号出现的时候,使用warn
}
0为关闭1为警告2为错误
}
当想要对某一文件添加特殊规则或者应用另一套规则时,就可以使用overrides,
overrides: {
files: ['path'],
rules: {
'quotes': [2, double]
}
}
eslint 支持的文件类型:
- .eslintrc.js
- .eslintrc.yaml
- .eslintrc.yml
- .eslintrc.json
- .eslintrc
- package.json
优先级从上到下,eslint只会使用一个,同时eslint文件应用具有就近原则,在同一层级存在配置时,就会使用当前层级和上层eslint配置文件的组合使用,并且近的文件属性优先。这样,如果每层都有eslint配置文件的话,那么这一层的配置就相当于是父级配置文件与当前的组合,利用这个特性,如果我们想要所有的代码都能使用这个属性,那么,1将它配置到项目的最顶层的配置文件中即可。通常他会一直向上找父级的配置文件,直到找到文件根目录的配置文件。我们并不能允许一直向上查找,就可以使用root:true属性,当检查到配置文件的这个属性时,就不会再向上查找了。
extend 继承
通常我们使用插件,插件本身也会输出一个火多个配置,所以我们就可以直接继承插件的配置。
{
plugins: ['react'],
extend: [
'plugin:react/recommended'
]
}
我们的项目中继承了一些vue的eslint的配置,这些配置都来自于我们安装的插件。
eslintignore
配置eslint需要忽略的文件。