Ignoring Code
ignorePatterns
in Config Files- The
.eslintignore
File - Using an Alternate File
- Using eslintIgnore in package.json
- Ignored File Warnings
ignorePatterns
in Config Files
You can tell ESLint to ignore specific files and directories using ignorePatterns
in your config files. ignorePatterns
patterns follow the same rules as .eslintignore
. Please see the the .eslintignore
file documentation to learn more.
{
"ignorePatterns": ["temp.js", "**/vendor/*.js"],
"rules": {
//...
}
}
- Glob patterns in
ignorePatterns
are relative to the directory that the config file is placed in. - You cannot write
ignorePatterns
property underoverrides
property. - Patterns defined in
.eslintignore
take precedence over theignorePatterns
property of config files.
If a glob pattern starts with /
, the pattern is relative to the base directory of the config file. For example, /foo.js
in lib/.eslintrc.json
matches to lib/foo.js
but not lib/subdir/foo.js
.
If a config is provided via the --config
CLI option, the ignore patterns that start with /
in the config are relative to the current working directory rather than the base directory of the given config. For example, if --config configs/.eslintrc.json
is present, the ignore patterns in the config are relative to .
rather than ./configs
.
The .eslintignore
File
You can tell ESLint to ignore specific files and directories by creating an .eslintignore
file in your project's root directory. The .eslintignore
file is a plain text file where each line is a glob pattern indicating which paths should be omitted from linting. For example, the following will omit all JavaScript files:
**/*.js
When ESLint is run, it looks in the current working directory to find an .eslintignore
file before determining which files to lint. If this file is found, then those preferences are applied when traversing directories. Only one .eslintignore
file can be used at a time, so .eslintignore
files other than the one in the current working directory will not be used.
Globs are matched using node-ignore, so a number of features are available:
- Lines beginning with
#
are treated as comments and do not affect the ignore patterns. - Paths are relative to the current working directory. This is also true of paths passed in via the
--ignore-pattern
command. - Lines preceded by
!
are negated patterns that re-include a pattern that was ignored by an earlier pattern. - Ignore patterns behave according to the
.gitignore
specification.
Of particular note is that like .gitignore
files, all paths used as patterns for both .eslintignore
and --ignore-pattern
must use forward slashes as their path separators.
# Valid
/root/src/*.js
# Invalid
\root\src\*.js
Please see .gitignore
's specification for further examples of valid syntax.
In addition to any patterns in the .eslintignore
file, ESLint always follows a couple of implicit ignore rules even if the --no-ignore
flag is passed. The implicit rules are as follows:
node_modules/
is ignored.- dot-files (except for
.eslintrc.*
), as well as dot-folders and their contents, are ignored.
There are also some exceptions to these rules:
If the path to lint is a glob pattern or directory path and contains a dot-folder, all dot-files and dot-folders will be linted. This includes dot-files and dot-folders that are buried deeper in the directory structure.
For example,
eslint .config/
will lint all dot-folders and dot-files in the.config
directory, including immediate children as well as children that are deeper in the directory structure.If the path to lint is a specific file path and the
--no-ignore
flag has been passed, ESLint will lint the file regardless of the implicit ignore rules.For example,
eslint .config/my-config-file.js --no-ignore
will causemy-config-file.js
to be linted. It should be noted that the same command without the--no-ignore
line will not lint themy-config-file.js
file.Allowlist and denylist rules specified via
--ignore-pattern
or.eslintignore
are prioritized above implicit ignore rules.For example, in this scenario,
.build/test.js
is the desired file to allowlist. Because all dot-folders and their children are ignored by default,.build
must first be allowlisted so that eslint becomes aware of its children. Then,.build/test.js
must be explicitly allowlisted, while the rest of the content is denylisted. This is done with the following.eslintignore
file:# Allowlist 'test.js' in the '.build' folder # But do not allow anything else in the '.build' folder to be linted !.build .build/* !.build/test.js
The following
--ignore-pattern
is also equivalent:eslint --ignore-pattern '!.build' --ignore-pattern '.build/*' --ignore-pattern '!.build/test.js' parent-folder/
Using an Alternate File
If you'd prefer to use a different file than the .eslintignore
in the current working directory, you can specify it on the command line using the --ignore-path
option. For example, you can use .jshintignore
file because it has the same format:
eslint --ignore-path .jshintignore file.js
You can also use your .gitignore
file:
eslint --ignore-path .gitignore file.js
Any file that follows the standard ignore file format can be used. Keep in mind that specifying --ignore-path
means that any existing .eslintignore
file will not be used. Note that globbing rules in .eslintignore
follow those of .gitignore
.
Using eslintIgnore in package.json
If an .eslintignore
file is not found and an alternate file is not specified, ESLint will look in package.json for an eslintIgnore
key to check for files to ignore.
{
"name": "mypackage",
"version": "0.0.1",
"eslintConfig": {
"env": {
"browser": true,
"node": true
}
},
"eslintIgnore": ["hello.js", "world.js"]
}
Ignored File Warnings
When you pass directories to ESLint, files and directories are silently ignored. If you pass a specific file to ESLint, then you will see a warning indicating that the file was skipped. For example, suppose you have an .eslintignore
file that looks like this:
foo.js
And then you run:
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 override.
✖ 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.
Consider another scenario where you may want to run ESLint on a specific dot-file or dot-folder, but have forgotten to specifically allow those files in your .eslintignore
file. You would run something like this:
eslint .config/foo.js
You would see this warning:
.config/foo.js
0:0 warning File ignored by default. Use a negated ignore pattern (like "--ignore-pattern '!<relative/path/to/filename>'") to override
✖ 1 problem (0 errors, 1 warning)
This message occurs because, normally, this file would be ignored by ESLint's implicit ignore rules (as mentioned above). A negated ignore rule in your .eslintignore
file would override the implicit rule and reinclude this file for linting. Additionally, in this specific case, --no-ignore
could be used to lint the file as well.