# 插件

# 指定解析器

默认情况下,ESLint 使用 Espree 作为其解析器。您可以选择指定在配置文件中使用不同的解析器,只要解析器满足以下要求:

  1. 它必须是可从使用解析器的配置文件加载的 Node 模块。通常,这意味着您应该使用 npm 单独安装解析器包。
  2. 它必须符合解析器接口。

请注意,即使具有这些兼容性,也不能保证外部解析器可以与 ESLint 正确工作,并且 ESLint 不会修复与其他解析器不兼容相关的错误。

要指定 npm 模块用作解析器,请使用 .eslintrc 文件中的 parser 选项指定它。例如,以下指定使用 Esprima 而不是 Espree:

{
    "parser": "esprima",
    "rules": {
        "semi": "error"
    }
}

以下解析器与 ESLint 兼容:

  • Esprima
  • @babel/eslint-parser - Babel 解析器的包装器,使其与 ESLint 兼容。
  • @typescript-eslint/parser - 将 TypeScript 转换为 ESTree 兼容形式的解析器,因此可以在 ESLint 中使用。

请注意,使用自定义解析器时,ESLint 仍需要 parserOptions 配置属性才能正常使用默认情况下不在 ECMAScript 5 中的功能。解析器都通过了 parserOptions 并且可能会或可能不会使用它们来确定要启用哪些功能。

# 指定处理器

插件可以提供处理器。处理器可以从其他类型的文件中提取 JavaScript 代码,然后让 ESLint 对 JavaScript 代码进行检查,或者处理器可以出于某种目的在预处理中转换 JavaScript 代码。

要在配置文件中指定处理器,请使用 processor 键与插件名称和处理器名称的连接字符串(由斜杠连接)。例如,以下启用插件 a-plugin 提供的处理器 a-processor

{
    "plugins": ["a-plugin"],
    "processor": "a-plugin/a-processor"
}

要为特定类型的文件指定处理器,请使用 overrides 键和 processor 键的组合。例如,以下使用处理器 a-plugin/markdown 处理 *.md 文件。

{
    "plugins": ["a-plugin"],
    "overrides": [
        {
            "files": ["*.md"],
            "processor": "a-plugin/markdown"
        }
    ]
}

处理器可以生成命名代码块,例如 0.js1.js。ESLint 将这样的命名代码块作为原始文件的子文件处理。您可以在配置的 overrides 部分为命名代码块指定其他配置。例如,以下对markdown文件中以.js结尾的命名代码块禁用strict规则。

{
    "plugins": ["a-plugin"],
    "overrides": [
        {
            "files": ["*.md"],
            "processor": "a-plugin/markdown"
        },
        {
            "files": ["**/*.md/*.js"],
            "rules": {
                "strict": "off"
            }
        }
    ]
}

ESLint 检查命名代码块的文件路径,如果任何 overrides 条目与文件路径不匹配,则忽略那些。如果要检查 *.js 以外的命名代码块,请务必添加 overrides 条目。

# 配置插件

ESLint 支持使用第三方插件。在使用插件之前,您必须使用 npm 安装它。

要在配置文件中配置插件,请使用 plugins 键,其中包含插件名称列表。插件名称中可以省略 eslint-plugin- 前缀。

{
    "plugins": [
        "plugin1",
        "eslint-plugin-plugin2"
    ]
}

在 YAML 中:

---
  plugins:
    - plugin1
    - eslint-plugin-plugin2

注意:

# 命名约定

# 引入插件

对于非范围包,可以省略 eslint-plugin- 前缀

{
    // ...
    "plugins": [
        "jquery", // means eslint-plugin-jquery
    ]
    // ...
}

同样的规则也适用于范围包:

{
    // ...
    "plugins": [
        "@jquery/jquery", // means @jquery/eslint-plugin-jquery
        "@foobar" // means @foobar/eslint-plugin
    ]
    // ...
}

# 使用插件

使用插件定义的规则、环境或配置时,必须按照约定引用它们:

  • eslint-plugin-foofoo/a-rule
  • @foo/eslint-plugin@foo/a-config
  • @foo/eslint-plugin-bar@foo/bar/a-environment

例如:

{
    // ...
    "plugins": [
        "jquery",   // eslint-plugin-jquery
        "@foo/foo", // @foo/eslint-plugin-foo
        "@bar"      // @bar/eslint-plugin
    ],
    "extends": [
        "plugin:@foo/foo/recommended",
        "plugin:@bar/recommended"
    ],
    "rules": {
        "jquery/a-rule": "error",
        "@foo/foo/some-rule": "error",
        "@bar/another-rule": "error"
    },
    "env": {
        "jquery/jquery": true,
        "@foo/foo/env-foo": true,
        "@bar/env-bar": true,
    }
    // ...
}
Last Updated: 6/14/2023, 8:56:23 AM