配置文件
配置文件格式
ESLint 支持多种格式的配置文件:
-
JavaScript
- 使用
.eslintrc.js
和导出包含您的配置的对象。 -
JavaScript (ESM)
-
.eslintrc.cjs
在 JavaScript 包中运行 ESLint 时使用,这些包"type":"module"
在package.json
。请注意,ESLint 目前不支持 ESM 配置。 -
YAML
- 使用
.eslintrc.yaml
or.eslintrc.yml
来定义配置结构。 -
JSON
- 用于
.eslintrc.json
定义配置结构。ESLint 的 JSON 文件也允许 JavaScript 样式的注释。 -
package.json
- 在你的
package.json
文件中创建一个eslintConfig
属性,并在那里定义你的配置。
如果同一目录下有多个配置文件,ESLint 只会使用一个。优先顺序如下:
-
.eslintrc.js
-
.eslintrc.cjs
-
.eslintrc.yaml
-
.eslintrc.yml
-
.eslintrc.json
-
package.json
使用配置文件
有两种使用配置文件的方法。
第一种使用配置文件的方法是通过
.eslintrc.*
和
package.json
文件。ESLint 将自动在要检查的文件的目录中查找它们,并在连续的父目录中一直查找到文件系统的根目录 (
/
)、当前用户的主目录 (
~/
) 或当
root: true
被指定。有关这方面的更多详细信息,请参阅下面的
级联和层次结构
。当您希望项目的不同部分有不同的配置或希望其他人能够直接使用 ESLint 而无需记住传递配置文件时,配置文件会很有用。
使用配置文件的第二种方法是将文件保存在您想要的任何位置,并使用
--config
选项将其位置传递给 CLI,例如:
eslint -c myconfig.json myfiletotest.js
如果您正在使用一个配置文件并希望 ESLint 忽略任何
.eslintrc.*
文件,请确保
--no-eslintrc
与
-c
标志一起使用。
下面是一个 JSON 配置文件示例,它使用 TypeScript -eslint 解析器来支持 TypeScript 语法:
{
"root": true,
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
"parser": "@typescript-eslint/parser",
"parserOptions": { "project": ["./tsconfig.json"] },
"plugins": [
"@typescript-eslint"
"rules": {
"@typescript-eslint/strict-boolean-expressions": [
"allowString" : false,
"allowNumber" : false
"ignorePatterns": ["src/**/*.test.ts", "src/frontend/generated/*"]
配置文件中的注释
JSON 和 YAML 配置文件格式都支持注释(package.json 文件不应包含它们)。您可以对 JSON 文件使用 JavaScript 样式的注释,对 YAML 文件使用 YAML 样式的注释。ESLint 安全地忽略配置文件中的注释。这使您的配置文件更加人性化。
对于 JavaScript 样式的注释:
{
"env": {
"browser": true
"rules": {
// Override our default settings just for this directory
"eqeqeq": "warn",
"strict": "off"
对于 YAML 样式的注释:
env:
browser: true
rules:
# Override default settings
eqeqeq: warn
strict: off
添加共享设置
ESLint 支持将共享设置添加到配置文件中。插件用于
settings
指定应在其所有规则之间共享的信息。您可以将
settings
对象添加到 ESLint 配置文件中,它将提供给正在执行的每个规则。如果您要添加自定义规则并希望它们能够访问相同的信息并且易于配置,这可能会很有用。
在 JSON 中:
{
"settings": {
"sharedData": "Hello"
在 YAML 中:
---
settings:
sharedData: "Hello"
级联和层次结构
使用
.eslintrc.*
和
package.json
文件进行配置时,您可以利用配置级联。假设您有以下结构:
your-project
├── .eslintrc.json
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc.json
└── test.js
配置级联的工作基于被检查文件的位置。如果
.eslintrc
在与被检查的文件相同的目录中有文件,则该配置优先。然后 ESLint 搜索目录结构,合并沿途找到的所有
.eslintrc
文件,直到到达带有
root: true
的
.eslintrc
文件或根目录。
同理,如果
package.json
根目录下有文件带
eslintConfig
字段,则其描述的配置将适用于其下的所有子目录,但目录中
.eslintrc
文件描述的配置
tests/
会在规范冲突的地方覆盖它。
your-project
├── package.json
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc.json
└── test.js
如果在同一目录下找到一个
.eslintrc
和一个
package.json
文件,
.eslintrc
将优先,
package.json
文件将不被使用。
默认情况下,ESLint 会在所有父文件夹中查找配置文件,直到根目录。如果您希望所有项目都遵循某种约定,这可能很有用,但有时会导致意想不到的结果。要将 ESLint 限制为特定项目,请将
"root": true
放置在
.eslintrc.*
文件或
package.json
文件的
eslintConfig
字段中,或者放在项目根级别的
.eslintrc.*
文件中。ESLint 一旦找到配置文件,就会停止在父文件夹中查找
"root": true
.
{
"root": true
在 YAML 中:
---
root: true
例如,下方
projectA
的
lib/
目录中的
.eslintrc
文件中设置了
"root": true
。在这种情况下,在 linting
main.js
时,将使用
lib/
中的配置,而不是
projectA/
中的
.eslintrc
文件。
home
└── user
└── projectA
├── .eslintrc.json <- Not used
└── lib
├── .eslintrc.json <- { "root": true }
└── main.js
完整的配置层次结构,从最高到最低优先级,如下所示:
-
内联配置:
-
/*eslint-disable*/
和/*eslint-enable*/
-
/*global*/
-
/*eslint*/
-
/*eslint-env*/
-
-
命令行选项(或 CLIEngine 等效项):
-
--global
-
--rule
-
--env
-
-c
,--config
-
-
项目级配置:
-
.eslintrc.*
或package.json
与 linted 文件位于同一目录中的文件 -
继续在祖先目录中搜索
.eslintrc.*
和package.json
文件,包括根目录,或者找到"root": true
的配置。
-
请注意,
您首选操作系统
(
~/
) 上当前用户的主目录在此上下文中也被视为根目录,搜索配置文件也将停止在那里。并且随着从 8.0.0 版本开始
删除对个人配置文件的支持,
该目录中存在的配置文件将被忽略。
扩展配置文件
一个配置文件,一旦扩展,就可以继承另一个配置文件的所有特征(包括规则、插件和语言选项)并修改所有选项。因此,存在三种配置,定义如下:
- 基本配置:扩展的配置。
- 派生配置:扩展基本配置的配置。
- Resulting actual config:将派生配置合并到基础配置中的结果。
extends
属性值为:
-
指定配置的字符串(配置文件的路径,可共享配置的名称
eslint:recommended
,或eslint:all
) - 一个字符串数组,其中每个附加配置都扩展了前面的配置
ESLint 递归地扩展配置,所以基本配置也可以有一个
extends
属性。属性中的相对路径和可共享的配置名称
extends
是从它们出现的配置文件的位置解析的。
eslint-config-
可以从配置名称中省略前缀。例如,
airbnb
解析为
eslint-config-airbnb
.
该
rules
属性可以执行以下任何操作来扩展(或覆盖)规则集:
- 启用附加规则
-
更改继承规则的严重性而不更改其选项:
-
基础配置:
"eqeqeq": ["error", "allow-null"]
-
派生配置:
"eqeqeq": "warn"
-
产生的实际配置:
"eqeqeq": ["warn", "allow-null"]
-
基础配置:
-
覆盖基本配置中的规则选项:
-
基础配置:
"quotes": ["error", "single", "avoid-escape"]
-
派生配置:
"quotes": ["error", "single"]
-
产生的实际配置:
"quotes": ["error", "single"]
-
基础配置:
-
覆盖基本配置中作为对象给出的规则的选项:
-
基础配置:
"max-lines": ["error", { "max": 200, "skipBlankLines": true, "skipComments": true }]
-
派生配置:
"max-lines": ["error", { "max": 100 }]
-
产生的实际配置:
"max-lines": ["error", { "max": 100 }]
whereskipBlankLines
和skipComments
default tofalse
-
基础配置:
使用可共享的配置包
可 共享的配置 是一个导出配置对象的 npm 包。确保你已经在你的项目根目录中安装了这个包,以便 ESLint 可以要求它。
extends
属性值可以省略包名的前缀
eslint-config-
。
该
npm init @eslint/config
命令可以创建配置,以便您可以扩展流行的样式指南(例如,
eslint-config-standard
)。
YAML 格式的配置文件示例:
extends: standard
rules:
comma-dangle:
- error
- always
no-empty: warn
使用
eslint:recommended
"eslint:recommended"
在属性中使用
extends
可启用报告常见问题的核心规则子集(这些规则在
规则页面
上用复选标记(推荐)标识)。
eslint:recommended
这是扩展和覆盖某些设置配置选项的示例:
JavaScript 格式的配置文件示例:
module.exports = {
"extends": "eslint:recommended",
"rules": {
// enable additional rules
"indent": ["error", 4],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "double"],
"semi": ["error", "always"],
// override configuration set by extending "eslint:recommended"
"no-empty": "warn",
"no-cond-assign": ["error", "always"],
// disable rules from base configurations
"for-direction": "off",
使用插件中的配置
插件 是一个 npm 包,可以为 ESLint 添加各种扩展。插件可以执行许多功能,包括但不限于添加新规则和导出 可共享配置 。确保软件包已安装在 ESLint 可能需要它的目录中。
plugins
属性值
可以省略包名的前缀
eslint-plugin-
。
extends
属性值可以包括:
-
plugin:
-
包名(可以省略前缀,例如,
react
是eslint-plugin-react
的缩写) -
/
-
配置名称(例如,
recommended
)
JSON 格式的配置文件示例:
{
"plugins": [
"react"
"extends": [
"eslint:recommended",
"plugin:react/recommended"
"rules": {
"react/no-set-state": "off"
使用配置文件
extends
属性值可以是基本
配置文件
的绝对或相对路径。ESLint 解析相对于使用它的配置文件的基本配置文件的相对路径。
JSON 格式的配置文件示例:
{
"extends": [
"./node_modules/coding-standard/eslintDefaults.js",
"./node_modules/coding-standard/.eslintrc-es6",
"./node_modules/coding-standard/.eslintrc-jsx"
"rules": {
"eqeqeq": "warn"
使用
"eslint:all"
该
extends
属性值可以是
"eslint:all"
启用当前安装的 ESLint 版本中的所有核心规则。核心规则集可以在 ESLint 的任何次要或主要版本中更改。
重要提示: 不建议将此配置 用于生产 环境,因为它会随着 ESLint 的每个次要和主要版本而变化。需要您自担风险使用它。
在决定项目配置时,您可以启用所有核心规则作为探索规则和选项的快捷方式,尤其是在您很少覆盖选项或禁用规则的情况下。规则的默认选项不是 ESLint 的背书(例如,
quotes
规则的默认选项并不意味着双引号优于单引号)。
如果您的配置扩展,在您升级到 ESLint 的新主要或次要版本后,请在使用
命令行
选项
eslint:all
之前查看报告的问题,以便了解新的可修复规则是否会对代码进行更改。
--fix
JavaScript 格式的配置文件示例:
module.exports = {
"extends": "eslint:all",
"rules": {
// override default options
"comma-dangle": ["error", "always"],
"indent": ["error", 2],
"no-cond-assign": ["error", "always"],
// disable now, but enable in the future
"one-var": "off", // ["error", "never"]
// disable
"init-declarations": "off",
"no-console": "off",
"no-inline-comments": "off",
基于全局模式的配置
v4.1.0+。
有时需要更精细控制的配置,例如,如果同一目录中的文件的配置必须不同。因此,您可以在
overrides
仅适用于与特定 glob 模式匹配的文件的键下提供配置,使用与在命令行中传递的相同格式(例如,
app/**/*.test.js
)。
覆盖中的全局模式使用 minimatch 语法 。
覆盖如何工作?
可以使用键覆盖基于配置中文件 glob 模式的设置
overrides
。使用密钥的示例
overrides
如下:
在你的
.eslintrc.json
:
{
"rules": {
"quotes": ["error", "double"]
"overrides": [
"files": ["bin/*.js", "lib/*.js"],
"excludedFiles": "*.test.js",
"rules": {
"quotes": ["error", "single"]
以下是覆盖在配置文件中的工作方式:
-
这些模式应用于相对于配置文件目录的文件路径。例如,如果您的配置文件具有路径
/Users/john/workspace/any-project/.eslintrc.js
,而您要 lint 的文件具有路径/Users/john/workspace/any-project/lib/util.js
,那么中提供的模式.eslintrc.js
将针对相对路径执行lib/util.js
。 -
全局模式覆盖的优先级高于同一配置文件中的常规配置。同一配置中的多个覆盖按顺序应用。也就是说,配置文件中的最后一个覆盖块始终具有最高优先级。
-
glob 特定配置的工作方式几乎与任何其他 ESLint 配置相同。覆盖块可以包含在常规配置中有效的任何配置选项,除了
root
and
ignorePatterns
。
-
glob 特定配置可以有一个
extends
设置,但root
扩展配置中的属性被忽略。扩展配置中的ignorePatterns
属性仅用于 glob 特定配置匹配的文件。 -
overrides
仅当父配置和子配置的 glob 模式都匹配时,才会应用嵌套设置。当扩展配置有overrides
设置时也是如此。
-
glob 特定配置可以有一个
-
可以在单个覆盖块中提供多个 glob 模式。文件必须至少匹配提供的模式之一才能应用配置。
-
覆盖块还可以指定要从匹配项中排除的模式。如果文件与任何排除的模式匹配,则配置将不适用。
相对全局模式
project-root
├── app
│ ├── lib
│ │ ├── foo.js
│ │ ├── fooSpec.js
│ ├── components
│ │ ├── bar.js
│ │ ├── barSpec.js
│ ├── .eslintrc.json
├── server
│ ├── server.js
│ ├── serverSpec.js
├── .eslintrc.json