版本

忽略文件

您可以通过以下方式在 eslint.config.js 文件中指定一个或多个全局模式,配置 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/"

全局模式解析

全局模式的评估方式取决于它们的位置和使用方法

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

忽略文件警告

当您将目录传递给 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 风格模式的文件中包含模式,您可以使用 includeIgnoreFile 实用程序,它来自 @eslint/compat 包。

// 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 全局模式。

更改语言