安装
npm install eslint --save-dev
初始化
./node_modules/.bin/eslint --init
执行上述命令,命令行会让你回答一下问题,包括项目的运行环境、框架等,回答后,会生成一个默认配置文件
指定eslint能够识别的语法,配置解析选项能够帮助eslint判断什么属于解析错误。默认情况下,eslint能够识别es5
和jsx
的语法,可以通过设置parserOptions
选项覆盖这些默认配置。parserOptions
的可配置项:
ECMAScript
语法版本。指定版本即可,比如对于es6
,设置此值为6
或2015
,其他版本依次类推。script
,可设置为module
。若设置为script
,则无法在文件中使用import
等。ecmaFeatures:指定其他可用的语言功能,可配置值:
return
语句es5
及更高版本可用)jsx
ecmaVersion
为es6
,可以让eslint识别es6
的语法,但是它并不代表eslint能够识别es6
中类似于Set
这些新的esmaScript
全局变量。需要配合设置{env:{es6:true}}
使eslint识别这些全局变量。只设置ecmaVersion
为es6
,在使用Set
等全局变量时,会遇到no-undef
的eslint报错。只设置{env:{es6:true}}
但是ecmaVersion
小于6
,则无法使用const
等语法,会遇到eslintparser error
的错误。jsx
为true
后,能够识别jsx
不代表能够识别React,React使用了一些eslint无法识别的jsx
语法。若要使用React
,可以使用eslint-plugin-react
默认情况下,eslint使用Espree
作为解析器,但是可以自行通过parser
字段设置解析器。详情可见eslint官网parser配置项
env
配置项指定了项目需要运行的环境,eslint根据env判断,哪些全局变量是可用的哪些是不可用的。比如设置了node:true
后,__dirname
变得可用,不然会报no-undef
错误。
node
、browser
、es6
、mocha
等,所有列表可见eslint
官网配置项/* eslint-env node, mocha */
node
这些已提前设置好的配置项外,也可以通过plugins
的方式引入环境,如下,指定plugins
,然后在env
中通过plugins/xx
的方式引入。{
"plugins": ["example"],
"env": {
"example/custom": true
}
}
在通过env
设置一部分变量后,可能仍然有部分是用户需要的全局变量,此时若不进行配置,也会报no-undef
的错误,所以需要通过global
的配置项告诉eslint这些变量是全局变量。
/* global var1, var2 */
/* global var1:writable, var2:writable *
{
"globals": {
"var1": "writable",
"var2": "readonly"
}
}
eslint可以使用第三方插件,通过npm
下载后,在配置文件中的plugins
字段进行配置即可。
{
"plugins": [
"plugin1",
"eslint-plugin-plugin2"
]
}
由于Node
的require
函数的特性,全局安装的eslint只能使用全局安装的插件,本地安装的eslint只能使用本地安装的插件。
eslint有很多rules
,每条规则可以被赋值为off
(或0)、warn
(或1),error
(或2)。
/* eslint eqeqeq: 0, curly: 2 */
若规则有更多配置项时,可以使用数组的方式:
/* eslint quotes: ["error", "double"], curly: 2 */
{
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["error", "double"]
}
}
eslint-plugin
前缀,eslint会使用不加前缀的名称去匹配/* eslint "plugin1/rule1": "error" */
{
"plugins": [
"plugin1"
],
"rules": {
"plugin1/rule1": "error"
}
}
/* eslint-disable */
/* eslint-disable no-alert, no-console */
alert('foo'); // eslint-disable-line
使用override
字段可以对特定文件使用特定规则。具体的文件路径解析规则等可以参见configuration-based-on-glob-patterns
{
"rules": {...},
"overrides": [
{
"files": ["*-test.js","*.spec.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
.eslint.*
配置文件 > 根文件夹中package.json
中eslintConfig
字段中的配置root:true
会使eslint停止向上查找extends
字段,配置可以继承一些已有的配置extends
字段可以被指定为代表某个配置的字符串,或一个数组,数组中,每个后面的配置继承前面的配置"quotes": ["error", "single", "avoid-escape"]
,rules
中指定配置为"eqeqeq": "warn"
,则最终配置为"eqeqeq": ["warn", "allow-null"]
,只覆盖其等级eslint:recommended
,eslint:recommended
内置了一系列核心规则,这些核心规则只会在eslint主版本变更是会进行变动module.exports = {
"extends": "eslint:recommended",
}
eslint-config-standard
,它会导出一个配置文件,可以把它下载到本地eslint可以引用到的地方,然后通过extends
继承配置包中的配置(此时可以忽略掉包名的eslint-config-
前缀)module.exports = {
"extends": "standard",
}
plugins
字段和extends
字段,extends
字段格式为plugins:packageName/configurationName
(packageName
可以忽略eslint-plugin-
前缀){
"plugins": [
"react"
],
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"rules": {
"no-set-state": "off"
}
}
{
"extends": [
"./node_modules/coding-standard/eslintDefaults.js",
"./node_modules/coding-standard/.eslintrc-es6",
],
}
all
,配置方式为:"extends": "eslint:all"
。这会启用eslint中所有内置的核心规则。这些规则会跟随eslint的发版(包括小版本和大版本)而变化。不推荐在正式项目中用这个配置,因为这会导致再升级eslint后,eslint会针对原有代码进行报错。.eslintignore
文件,通过正则的方式,指定不进行lint的文件node_modules
和bower_components
默认忽略