配置插件
您可以通过多种不同的方式使用插件扩展 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.js
和 1.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/json
的 json/jsonc
语言。
// eslint.config.js
import json from "@eslint/json";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.json"],
plugins: {
json
},
language: "json/jsonc"
}
]);