版本

忽略文件

您可以通过以下方式在 linting 时配置 ESLint 以忽略某些文件和目录,方法是在以下位置指定一个或多个 glob 模式

  • 在您的 eslint.config.js 文件中。
  • 在命令行中使用 --ignore-pattern

忽略文件

在您的 eslint.config.js 文件中,如果 ignores 键在配置对象中没有与其他键一起使用,则这些模式充当全局忽略。这是一个示例

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores([".config/*"])
]);

此配置指定应忽略 .config 目录中的所有文件。此模式在默认模式 ["**/node_modules/", ".git/"] 之后添加。

您也可以使用 --ignore-pattern 在命令行上忽略文件,例如

npm

npx eslint . --ignore-pattern '.config/*' 

yarn

yarn dlx eslint . --ignore-pattern '.config/*' 

pnpm

pnpm dlx eslint . --ignore-pattern '.config/*' 

bun

bunx eslint . --ignore-pattern '.config/*' 

忽略目录

忽略目录的工作方式与忽略文件相同,方法是将模式放置在配置对象的 ignores 键中,而不包含其他键。例如,以下内容忽略了整个 .config 目录(意味着文件搜索根本不会遍历到其中)

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores([".config/"])
]);

.gitignore 不同,像 .config 这样的忽略模式只会忽略与配置文件位于同一目录中的 .config 目录。如果您想递归地忽略所有名为 .config 的目录,则需要使用 **/.config/,如本例所示

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores(["**/.config/"])
]);

取消忽略文件和目录

您还可以取消忽略先前模式(包括默认模式)忽略的文件和目录。例如,此配置取消忽略 node_modules/mylibrary

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores([
        "!node_modules/",           // unignore `node_modules/` directory
        "node_modules/*",           // ignore its content
        "!node_modules/mylibrary/"  // unignore `node_modules/mylibrary` directory
    ])
]);

如果您想忽略一个目录,但要排除特定文件或子目录,则必须使用忽略模式 directory/**/* 而不是 directory/**。模式 directory/** 会忽略整个目录及其内容,因此遍历将完全跳过该目录,并且您无法取消忽略其中的任何内容。

例如,build/** 忽略目录 build 及其内容,而 build/**/* 仅忽略其内容。如果您想忽略 build 目录中的所有内容,但排除 build/test.js,则需要创建如下配置

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores([
        "build/**/*",     // ignore all contents in and under `build/` directory but not the `build/` directory itself
        "!build/test.js"  // unignore `!build/test.js`
    ])
]);

如果您想忽略目录,但排除该目录下任何级别的特定文件,您还应确保未忽略子目录。请注意,虽然以 / 结尾的模式仅匹配目录,但不以 / 结尾的模式同时匹配文件和目录,因此无法编写仅忽略文件的单个模式,但您可以使用两个模式来实现此目的:一个用于忽略所有内容,另一个用于取消忽略子目录。

例如,此配置忽略 build 目录及其下所有文件,但排除任何级别的名为 test.js 的文件

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores([
        "build/**/*",        // ignore all contents in and under `build/` directory but not the `build/` directory itself
        "!build/**/*/",      // unignore all subdirectories
        "!build/**/test.js"  // unignore `test.js` files
    ])
]);

您也可以使用 --ignore-pattern 在命令行上取消忽略文件,例如

npm

npx eslint . --ignore-pattern '!node_modules/' 

yarn

yarn dlx eslint . --ignore-pattern '!node_modules/' 

pnpm

pnpm dlx eslint . --ignore-pattern '!node_modules/' 

bun

bunx eslint . --ignore-pattern '!node_modules/' 

Glob 模式解析

glob 模式的评估方式取决于它们的所在位置和使用方式

  1. eslint.config.js 文件中使用 ignores 时,glob 模式相对于 eslint.config.js 文件进行评估。
  2. 当在使用 --config 命令行选项指定的备用配置文件中使用 ignores 时,glob 模式相对于当前工作目录进行评估。
  3. 当使用 --ignore-pattern 时,glob 模式相对于当前工作目录进行评估。

命名全局忽略配置

默认情况下,globalIgnores() 将为配置分配一个名称,该名称表示您的忽略。您可以通过为 globalIgnores() 提供第二个参数来覆盖此名称,该参数是您想要使用的名称而不是默认名称

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores(["build/**/*"], "Ignore build directory")
]);

本例中的 "Ignore Build Directory" 字符串是为全局忽略创建的配置的名称。这对于调试目的很有用。

忽略文件警告

当您将目录传递给 ESLint CLI 时,文件和目录将被静默忽略。如果您将特定文件传递给 ESLint,则 ESLint 会创建一个警告,指出该文件已被跳过。例如,假设您有一个 eslint.config.js 文件,如下所示

// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";

export default defineConfig([
    globalIgnores(["foo.js"])
]);

然后您运行

npm

npx eslint foo.js 

yarn

yarn dlx eslint foo.js 

pnpm

pnpm dlx eslint foo.js 

bun

bunx eslint foo.js 

您将看到此警告

foo.js
  0:0  warning  File ignored because of a matching ignore pattern. Use "--no-ignore" to disable file ignore settings or use "--no-warn-ignored" to suppress this warning.

✖ 1 problem (0 errors, 1 warning)

出现此消息是因为 ESLint 不确定您是否真的想 lint 该文件。如消息所示,您可以使用 --no-ignore 来忽略忽略规则的使用。

包含 .gitignore 文件

如果您想包含来自 .gitignore 文件或任何其他具有 gitignore 样式模式的文件的模式,您可以使用来自 @eslint/compat 包的 includeIgnoreFile 实用程序。

// eslint.config.js
import { defineConfig } from "eslint/config";
import { includeIgnoreFile } from "@eslint/compat";
import path from "node:path";
import { fileURLToPath } from "node:url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const gitignorePath = path.resolve(__dirname, ".gitignore");

export default defineConfig([
    includeIgnoreFile(gitignorePath),
    {
        // your overrides
    }
]);

这会自动加载指定的文件并将 gitignore 样式模式转换为 ignores glob 模式。

更改语言