版本

配置插件

您可以通过多种不同的方式使用插件扩展 ESLint。 插件可以包括

  • 自定义规则,以验证您的代码是否符合特定期望,以及在不符合期望时该怎么做。
  • 自定义配置。 有关如何使用这些配置的详细信息,请参阅插件的文档。
  • 自定义处理器,用于从其他类型的文件中提取 JavaScript 代码或在 linting 之前预处理代码。

配置插件

ESLint 支持使用第三方插件。 插件只是符合 ESLint 识别的特定接口的对象。

要在配置文件中配置插件,请使用 plugins 键,其中包含一个对象,其属性表示插件命名空间,值等于插件对象。

// eslint.config.js
import example from "eslint-plugin-example";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        plugins: {
            example
        },
        rules: {
            "example/rule1": "warn"
        }
    }
]);

配置本地插件

插件不需要发布到 npm 即可与 ESLint 一起使用。 您也可以直接从文件加载插件,如本例所示

// eslint.config.js
import local from "./my-local-plugin.js";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        plugins: {
            local
        },
        rules: {
            "local/rule1": "warn"
        }
    }
]);

在这里,使用了命名空间 local,但您也可以使用您喜欢的任何名称。

配置虚拟插件

插件定义可以直接在您的配置中虚拟创建。 例如,假设您有一个包含在名为 my-rule.js 文件中的规则,您想在配置中启用它。 您可以定义一个虚拟插件来做到这一点,如本例所示

// eslint.config.js
import myRule from "./rules/my-rule.js";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        plugins: {
            local: {
                rules: {
                    "my-rule": myRule
                }
            }
        },
        rules: {
            "local/my-rule": "warn"
        }
    }
]);

在这里,命名空间 local 用于定义虚拟插件。 然后,规则 myRule 在虚拟插件的 rules 对象内被分配名称 my-rule。(有关插件的完整格式,请参阅 创建插件。)然后,您可以将规则引用为 local/my-rule 来配置它。

使用插件规则

您可以使用插件中包含的特定规则。 为此,请使用 plugins 键在配置对象中指定插件。 plugin 键的值是一个对象,其中插件的名称是属性名称,值是插件对象本身。 这是一个例子

// eslint.config.js
import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        files: ["**/*.js"],
        plugins: {
            jsdoc: jsdoc
        },
        rules: {
            "jsdoc/require-description": "error",
            "jsdoc/check-values": "error"
        }
    }
]);

在此配置中,JSDoc 插件被定义为具有名称 jsdoc。 每个规则名称中的前缀 jsdoc/ 表示该规则来自具有该名称的插件,而不是来自 ESLint 本身。

由于插件的名称和插件对象都是 jsdoc,您也可以将配置缩短为这样

import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        files: ["**/*.js"],
        plugins: {
            jsdoc
        },
        rules: {
            "jsdoc/require-description": "error",
            "jsdoc/check-values": "error"
        }
    }
]);

虽然这是最常见的约定,但您不需要使用插件规定的相同名称。 您可以指定您喜欢的任何前缀,例如

import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        files: ["**/*.js"],
        plugins: {
            jsd: jsdoc
        },
        rules: {
            "jsd/require-description": "error",
            "jsd/check-values": "error"
        }
    }
]);

此配置对象使用 jsd 作为前缀插件,而不是 jsdoc

指定处理器

插件可以提供处理器。 处理器可以从其他类型的文件中提取 JavaScript 代码,然后让 ESLint lint JavaScript 代码。 或者,处理器可以在预处理期间转换 JavaScript 代码。

要在配置文件中指定处理器,请使用 processor 键并以 namespace/processor-name 格式分配处理器名称。 例如,以下代码对 *.md 文件使用来自 @eslint/markdown 的处理器。

// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        files: ["**/*.md"],
        plugins: {
            markdown
        },
        processor: "markdown/markdown"
    }
]);

处理器可能会生成命名代码块,例如 0.js1.js。 ESLint 将此类命名代码块视为原始文件的子文件。 您可以使用其他配置对象为命名代码块指定其他配置。 例如,以下代码禁用 markdown 文件中以 .js 结尾的命名代码块的 strict 规则。

// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";

export default defineConfig([
    // applies to all JavaScript files
    {
        rules: {
            strict: "error"
        }
    },

    // applies to Markdown files
    {
        files: ["**/*.md"],
        plugins: {
            markdown
        },
        processor: "markdown/markdown"
    },

    // applies only to JavaScript blocks inside of Markdown files
    {
        files: ["**/*.md/*.js"],
        rules: {
            strict: "off"
        }
    }
]);

仅当命名代码块是 JavaScript 文件或它们与配置对象中的 files 条目匹配时,ESLint 才会 lint 命名代码块。 如果您要 lint 非 JavaScript 命名代码块,请务必添加带有匹配 files 条目的配置对象。 另请注意,全局忽略 也适用于命名代码块。

// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";

export default defineConfig([
    // applies to Markdown files
    {
        files: ["**/*.md"],
        plugins: {
            markdown
        },
        processor: "markdown/markdown"
    },

    // applies to all .jsx files, including jsx blocks inside of Markdown files
    {
        files: ["**/*.jsx"],
        languageOptions: {
            parserOptions: {
                ecmaFeatures: {
                    jsx: true
                }
            }
        }
    },

    // ignore jsx blocks inside of test.md files
    {
        ignores: ["**/test.md/*.jsx"]
    }
]);

指定语言

插件可以提供语言。 语言允许 ESLint lint 除 JavaScript 之外的编程语言。 要在配置文件中指定语言,请使用 language 键并以 namespace/language-name 格式分配语言名称。 例如,以下代码对 *.json 文件使用来自 @eslint/jsonjson/jsonc 语言。

// eslint.config.js
import json from "@eslint/json";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        files: ["**/*.json"],
        plugins: {
            json
        },
        language: "json/jsonc"
    }
]);

常见问题

更改语言