Ignore Files
You can configure ESLint to ignore certain files and directories while linting by specifying one or more glob patterns in the following ways:
- Inside of your
eslint.config.js
file - On the command line using
--ignore-pattern
Ignoring Files
In your eslint.config.js
file, if an ignores
key is used without any other keys in the configuration object, then the patterns act as global ignores. Here’s an example:
// eslint.config.js
export default [
{
ignores: [".config/*"]
}
];
This configuration specifies that all of the files in the .config
directory should be ignored. This pattern is added after the default patterns, which are ["**/node_modules/", ".git/"]
.
You can also ignore files on the command line using --ignore-pattern
, such as:
npx eslint . --ignore-pattern ".config/*"
Ignoring Directories
Ignoring directories works the same way as ignoring files, by placing a pattern in the ignores
key of a configuration object with no other keys. For example, the following ignores the .config
directory as a whole (meaning file search will not traverse into it at all):
// eslint.config.js
export default [
{
ignores: [".config/"]
}
];
Unlike .gitignore
, an ignore pattern like .config
will only ignore the .config
directory in the same directory as the configuration file. If you want to recursively ignore all directories named .config
, you need to use **/.config/
, as in this example:
// eslint.config.js
export default [
{
ignores: ["**/.config/"]
}
];
Unignoring Files and Directories
You can also unignore files and directories that are ignored by previous patterns, including the default patterns. For example, this config unignores 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
]
}
];
If you’d like to ignore a directory except for specific files or subdirectories, then the ignore pattern directory/**/*
must be used instead of directory/**
. The pattern directory/**
ignores the entire directory and its contents, so traversal will skip over the directory completely and you cannot unignore anything inside.
For example, build/**
ignores directory build
and its contents, whereas build/**/*
ignores only its contents. If you’d like to ignore everything in the build
directory except for build/test.js
, you’d need to create a config like this:
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`
]
}
];
If you’d like to ignore a directory except for specific files at any level under the directory, you should also ensure that subdirectories are not ignored. Note that while patterns that end with /
only match directories, patterns that don’t end with /
match both files and directories so it isn’t possible to write a single pattern that only ignores files, but you can achieve this with two patterns: one to ignore all contents and another to unignore subdirectories.
For example, this config ignores all files in and under build
directory except for files named test.js
at any level:
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
]
}
];
You can also unignore files on the command line using --ignore-pattern
, such as:
npx eslint . --ignore-pattern "!node_modules/"
Glob Pattern Resolution
How glob patterns are evaluated depends on where they are located and how they are used:
- When using
ignores
in aneslint.config.js
file, glob patterns are evaluated relative to theeslint.config.js
file. - When using
ignores
in an alternate configuration file specified using the--config
command line option, glob patterns are evaluated relative to the current working directory. - When using
--ignore-pattern
, glob patterns are evaluated relative to the current working directory.
Ignored File Warnings
When you pass directories to the ESLint CLI, files and directories are silently ignored. If you pass a specific file to ESLint, then ESLint creates a warning that the file was skipped. For example, suppose you have an eslint.config.js
file that looks like this:
// eslint.config.js
export default [
{
ignores: ["foo.js"]
}
]
And then you run:
npx eslint foo.js
You’ll see this warning:
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)
This message occurs because ESLint is unsure if you wanted to actually lint the file or not. As the message indicates, you can use --no-ignore
to omit using the ignore rules.
Including .gitignore
Files
If you want to include patterns from a .gitignore
file or any other file with gitignore-style patterns, you can use includeIgnoreFile
utility from the @eslint/compat
package.
// 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
}
];
This automatically loads the specified file and translates gitignore-style patterns into ignores
glob patterns.