# 忽略代码

# 配置文件中的 ignorePatterns

你可以告诉 ESLint 在你的配置文件中使用 ignorePatterns 忽略特定的文件和目录。ignorePatterns 模式遵循与 .eslintignore 相同的规则。请参阅 .eslintignore 文件文档 了解更多信息。

{
    "ignorePatterns": ["temp.js", "**/vendor/*.js"],
    "rules": {
        //...
    }
}
  • ignorePatterns 中的通配符模式与配置文件所在的目录相关。
  • 您不能在 overrides 属性下写入 ignorePatterns 属性。
  • .eslintignore 中定义的模式优先于配置文件的 ignorePatterns 属性。

如果 glob 模式以 / 开头,则该模式相对于配置文件的基本目录。例如,lib/.eslintrc.json 中的 /foo.js 匹配 lib/foo.js,但不匹配 lib/subdir/foo.js

如果通过 --config CLI 选项提供配置,则配置中以 / 开头的忽略模式相对于当前工作目录,而不是给定配置的基本目录。例如,如果 --config configs/.eslintrc.json 存在,则配置中的忽略模式是相对于 . 而不是 ./configs

# .eslintignore 文件

你可以通过在项目的根目录中创建一个 .eslintignore 文件来告诉 ESLint 忽略特定的文件和目录。.eslintignore 文件是一个纯文本文件,其中每一行都是一个 glob 模式,指示应该从 linting 中省略哪些路径。例如,以下将省略所有 JavaScript 文件:

**/*.js

运行 ESLint 时,它会在当前工作目录中查找 .eslintignore 文件,然后再确定要检查哪些文件。如果找到此文件,则在遍历目录时应用这些首选项。一次只能使用一个 .eslintignore 文件,因此不会使用当前工作目录中的 .eslintignore 文件以外的文件。

Glob 使用 node-ignore 进行匹配,因此可以使用许多功能:

  • # 开头的行被视为注释,不会影响忽略模式。
  • 路径是相对于当前工作目录的。通过 --ignore-pattern 命令 传入的路径也是如此。
  • ! 开头的行是否定模式,它重新包含一个被早期模式忽略的模式。
  • 忽略模式按照 .gitignore 规范 运行。

特别值得注意的是,与 .gitignore 文件一样,用作 .eslintignore--ignore-pattern 模式的所有路径都必须使用正斜杠作为其路径分隔符。

# Valid
/root/src/*.js

# Invalid
\root\src\*.js

有关有效语法的更多示例,请参阅 .gitignore 的规范。

除了 .eslintignore 文件中的任何模式之外,ESLint 始终遵循一些隐式忽略规则,即使传递了 --no-ignore 标志。隐含规则如下:

  • node_modules/ 被忽略。
  • 点文件(.eslintrc.* 除外)以及点文件夹及其内容将被忽略。

这些规则也有一些例外:

  • 如果 lint 的路径是 glob 模式或目录路径并且包含点文件夹,则所有点文件和点文件夹都将被 lint。这包括深埋在目录结构中的点文件和点文件夹。

    例如,eslint .config/ 将对 .config 目录中的所有 dot-folders 和 dot-files 进行检查,包括直接子级以及目录结构中更深的子级。`

  • 如果 lint 的路径是一个特定的文件路径并且 --no-ignore 标志已经被传递,ESLint 将 lint 文件而不考虑隐含的忽略规则。

    例如,eslint .config/my-config-file.js --no-ignore 将导致 my-config-file.js 被 linted。应该注意的是,没有 --no-ignore 行的相同命令不会 lint my-config-file.js 文件。

  • 通过 --ignore-pattern 或 .eslintignore 指定的允许列表和拒绝列表规则优先于隐式忽略规则。

    例如,在这种情况下,.build/test.js 是要列入白名单的文件。因为默认情况下会忽略所有点文件夹及其子文件夹,所以必须首先将 .build 列入白名单,以便 eslint 了解其子文件夹。然后,必须将 .build/test.js 明确列入白名单,而将其余内容列入黑名单。这是通过以下 .eslintignore 文件完成的:

# 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

下面的 --ignore-pattern 也是等价的:

eslint --ignore-pattern '!.build' --ignore-pattern '.build/*' --ignore-pattern '!.build/test.js' parent-folder/

# 使用备用文件

如果您希望在当前工作目录中使用与 .eslintignore 不同的文件,则可以使用 --ignore-path 选项在命令行中指定它。例如,您可以使用 .jshintignore 文件,因为它具有相同的格式:

eslint --ignore-path .jshintignore file.js

你也可以使用你的 .gitignore 文件:

eslint --ignore-path .gitignore file.js

可以使用任何遵循标准忽略文件格式的文件。请记住,指定 --ignore-path 意味着不会使用任何现有的 .eslintignore 文件。请注意,.eslintignore 中的通配规则遵循 .gitignore 中的通配规则。

# 在 package.json 中使用 eslintIgnore

如果未找到 .eslintignore 文件且未指定备用文件,ESLint 将在 package.json 中查找 eslintIgnore 键以检查要忽略的文件。

{
    "name": "mypackage",
    "version": "0.0.1",
    "eslintConfig": {
        "env": {
            "browser": true,
            "node": true
        }
    },
    "eslintIgnore": ["hello.js", "world.js"]
}

# 忽略的文件警告

当你将目录传递给 ESLint 时,文件和目录会被忽略。如果您将特定文件传递给 ESLint,那么您将看到一条警告,指示该文件已被跳过。例如,假设您有一个如下所示的 .eslintignore 文件:

foo.js

然后你运行:

eslint foo.js

你会看到这个警告:

foo.js
  0:0  warning  File ignored because of a matching ignore pattern. Use "--no-ignore" to override.1 problem (0 errors, 1 warning)

出现此消息是因为 ESLint 不确定您是否要实际 lint 文件。如消息所示,您可以使用 --no-ignore 忽略使用忽略规则。

考虑另一种情况,您可能希望在特定的点文件或点文件夹上运行 ESLint,但忘记在 .eslintignore 文件中专门允许这些文件。你会运行这样的事情:

eslint .config/foo.js

你会看到这个警告:

.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)

出现此消息是因为通常 ESLint 的隐式忽略规则会忽略此文件(如上所述)。.eslintignore 文件中的否定忽略规则将覆盖隐式规则并重新包含此文件以进行检查。此外,在这种特定情况下,也可以使用 --no-ignore 对文件进行检查。

Last Updated: 6/14/2023, 8:56:23 AM