版本

忽略文件

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

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

忽略文件

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

// eslint.config.js
export default [
    {
        ignores: [".config/*"]
    }
];

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

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

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

忽略目录

忽略目录的方式与忽略文件的方式相同,即将模式放在没有其他键的配置对象的 ignores 键中。例如,以下代码忽略整个 .config 目录(这意味着文件搜索将完全不会遍历到该目录)

// eslint.config.js
export default [
    {
        ignores: [".config/"]
    }
];

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

// eslint.config.js
export default [
    {
        ignores: ["**/.config/"]
    }
];

取消忽略文件和目录

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

export default [
    {
        ignores: [
            "!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,则需要创建如下配置

export default [
    {
        ignores: [
            "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 的文件

export default [
    {
        ignores: [
            "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 在命令行中取消忽略文件,例如

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

Glob 模式解析

glob 模式如何评估取决于它们的位置和使用方法

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

忽略文件警告

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

// eslint.config.js
export default [
    {
        ignores: ["foo.js"]
    }
]

然后你运行

npx 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 { 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 [
    includeIgnoreFile(gitignorePath),
    {
        // your overrides
    }
];

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

更改语言