忽略文件
您可以通过以下方式在 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 模式的评估方式取决于它们的所在位置和使用方式
- 在
eslint.config.js
文件中使用ignores
时,glob 模式相对于eslint.config.js
文件进行评估。 - 当在使用
--config
命令行选项指定的备用配置文件中使用ignores
时,glob 模式相对于当前工作目录进行评估。 - 当使用
--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 模式。