ESLint的配置
ESLint完全配置,这意味着您可以关闭每个规则,只运行基本的语法验证,或者混合并匹配捆绑的规则和自定义规则,使ESLint来完善你的的项目。 配置ESLint有两种主要方法:
Configuration Comments
(注释配置)- 使用JavaScript注释将配置信息直接嵌入文件。Configuration Files
(文件配置)- 使用JavaScript
,JSON
或YAML
文件来指定整个目录及其所有子目录的配置信息。 这可以是package.json
文件中的.eslintrc.*
文件或eslintConfig
字段的形式,这两个ESLint都将自动查找和读取,也可以在命令行中指定配置文件。
有几个可以配置的信息:
Environments
(环境)- 您的脚本运行的环境。每个环境都带有一组预定义的全局变量。Globals
(全局)- 您的脚本在执行期间访问的其他全局变量。Rules
(规则)- 启用了哪些规则以及什么错误级别。
所有这些选项都可以让您细粒度的控制ESLint如何处理我们的代码。
Specifying Parser Options
ESLint允许您指定要支持的JavaScript语言选项。 默认情况下,ESLint支持ECMAScript 5语法。 您可以通过使用解析器选项来覆盖该设置以支持其他ECMAScript版本以及JSX。
请注意,支持JSX语法与支持React不同。 React将特定语义应用于ESLint无法识别的JSX语法。 如果您使用React并且需要React语义,我们建议使用eslint-plugin-react
。同样,支持ES6语法与支持新的ES6全局变量(例如,新的类型,如Set)不同。 对于ES6语法,使用{“parserOptions”:{“ecmaVersion”:6}}
; 对于新的ES6全局变量,使用{“env”:{“es6”:true}}
(此设置自动启用ES6语法)。 解析器选项通过使用parserOptions
属性在.eslintrc.*
文件中设置。 可用的选项有:
ecmaVersion
- 设置为3,5(默认),6,7或8以指定要使用的ECMAScript语法的版本。 您也可以设置为2015(与6)相同,2016(与7相同)或2017(与8相同))使用年度命名。sourceType
- 如果您的代码在ECMAScript模块中,请设置为“脚本”(默认)或“模块”。-
ecmaFeatures
- 一个对象,指出您要使用哪些其他语言功能:globalReturn
- 允许在全局范围内使用return
impliedStrict
- 启用全局的严格模式jsx
- 启用JSXexperimentalObjectRestSpread
- 启用对草案或实验中对象的支持
一个.eslintrc.json
例子:
{
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"rules": {
"semi": 2
}
}
设置解析器选项有助于ESLint确定解析错误是什么。 默认情况下,所有语言选项都为false
。
Specifying Parser
默认情况下,ESLint使用Espree
作为其解析器。 只要解析器满足以下要求,您可以选择指定在配置文件中使用不同的解析器:
它必须是本地安装的npm模块。
它必须有一个Esprima兼容的接口(它必须导出一个parse()方法)。
它必须生成与Esprima兼容的AST和令牌对象。
请注意,即使有这些兼容性,也不能保证外部解析器能够与ESLint正常工作,ESLint不会修复与其他解析器不兼容的错误。
要指示要用作解析器的npm模块,请使用.eslintrc
文件中的解析器选项指定它。 例如,以下规定使用Esprima而不是Espree:
{
"parser": "esprima",
"rules": {
"semi": "error"
}
}
以下解析器与ESLint兼容:
Esprima
Babel-ESLint - 围绕Babel解析器的包装器,使其与ESLint兼容。
typescript-eslint-parser(实验) - 将TypeScript转换为ESTree兼容表单的解析器,以便可以在ESLint中使用。 目标是允许由ESLint解析TypeScript文件(尽管不一定通过所有ESLint规则)。
请注意,使用自定义解析器时,ESLint默认情况下仍然需要parserOptions
配置属性才能正常使用ECMAScript 5中的功能。 解析器都被传递给parserOptions
,并且可能使用或不使用它们来确定要启用哪些功能。
Specifying Environments
可用的环境有:
浏览器 - 浏览器全局变量。
node - Node.js全局变量和Node.js作用域。
commonjs - CommonJS全局变量和CommonJS作用域(将其用于使用Browserify / WebPack的仅浏览器代码)。
shared-node-browser - Node和Browser共同的全局作用域。
es6 - 启用除模块之外的所有ECMAScript 6功能(这将自动将ecmaVersion解析器选项设置为6)。
...
这些环境不是相互排斥的,因此您可以一次定义多个。
环境可以在文件内部,配置文件中指定,也可以使用--env
命令行。
要使用JavaScript文件中的注释指定环境,请使用以下格式:
/* eslint-env node, mocha */
这使Node.js和Mocha环境成为可能。
要指定配置文件中的环境,请使用env
,并通过将每个环境设置为true
来指定要启用的环境。 例如,以下功能可以启用浏览器和Node.js环境:
{
"env": {
"browser": true,
"node": true
}
}
package.json
文件中
{
"name": "mypackage",
"version": "0.0.1",
"eslintConfig": {
"env": {
"browser": true,
"node": true
}
}
}
YAML中配置
---
env:
browser: true
node: true
如果要在环境中使用插件,请务必在plugins
数组中指定插件名称,然后使用未修饰的插件名称,后跟斜杠,后跟环境名称,例如:
{
"plugins": ["example"],
"env": {
"example/custom": true
}
}
package.json
文件中
{
"name": "mypackage",
"version": "0.0.1",
"eslintConfig": {
"plugins": ["example"],
"env": {
"example/custom": true
}
}
}
YAML文件中
---
plugins:
- example
env:
example/custom: true
Specifying Globals
no-undef规则将对被访问但未在同一文件中定义的变量发出警告。如果您在文件中使用全局变量,那么定义这些全局变量是有必要的,以便ESLint不会对其使用情况发出警告。 您可以使用文件中的注释或配置文件来定义全局变量。
要使用JavaScript文件中的注释来指定全局变量,请使用以下格式:
/* global var1, var2 */
这定义了两个全局变量var1和var2。 如果要选择指定这些全局变量永远不会被写入(只读),则可以使用false标志来设置每个变量:
/* global var1:false, var2:false */
要在配置文件中配置全局变量,请使用全局关键字并指出要使用的全局变量。将每个全局变量名设置为true,以允许变量被覆盖或false以禁止覆盖。 例如:
{
"globals": {
"var1": true,
"var2": false
}
}
YAML中
---
globals:
var1: true
var2: false
这些示例允许在代码中覆盖var1,但不允许覆盖var2。
Configuring Plugins
ESLint支持使用第三方插件。 在使用插件之前,您必须使用npm进行安装。
要在配置文件中配置插件,请使用plugins
,其中包含插件名称列表。 可以从插件名称中省略eslint-plugin-前缀。
{
"plugins": [
"plugin1",
"eslint-plugin-plugin2"
]
}
YAML中
---
plugins:
- plugin1
- eslint-plugin-plugin2
Configuring Rules
ESLint附带了大量的规则。 您可以使用配置注释或配置文件修改项目使用的规则。 要更改规则设置,必须将规则ID设置为以下值之一:
"off"
或0
- 关闭规则"warn"
或1
- 将规则作为警告(不影响退出代码)"error"
或2
- 将规则打开为错误(触发时退出代码为1)
要使用配置注释配置文件内的规则,请使用以下格式的注释
/* eslint eqeqeq: "off", curly: "error" */
在这个例子中,eqeqeq
被关闭,curly
被打开作为一个错误。 你也可以这么写:
/* eslint eqeqeq: 0, curly: 2 */
如果规则有其他选项,则也可以使用数组来指定,例如:
/* eslint quotes: ["error", "double"], curly: 2 */
此注释指定引号规则的“double”选项。 数组中的第一个值始终是off
/warn
/error
。
配置文件中:
{
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["error", "double"]
}
}
YAML中
---
rules:
eqeqeq: off
curly: error
quotes:
- error
- double
若要配置plugin
的规则,方式如下
{
"plugins": [
"plugin1"
],
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["error", "double"],
"plugin1/rule1": "error"
}
}
YAML中
---
plugins:
- plugin1
rules:
eqeqeq: 0
curly: error
quotes:
- error
- "double"
plugin1/rule1: error
当然插件的规则也可以使用注释来定义
/* eslint "plugin1/rule1": "error" */
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。