是否可以忽略某些但不是所有父目录中的 ESLint 配置文件?

Is it possible to ignore ESLint configuration files in certain, but not all, parent directories?

根据ESLint documentation,当ESLint为运行时,它会在当前目录和包括根目录在内的所有父目录中搜索配置文件(/) 、主目录或在 ESLint 配置文件中指定 root: true 选项的目录。

是否可以将 ESLint 配置为检查某些父目录中的 ESLint 配置文件,而不是其他目录?

为了使事情更具体,以我目前正在从事的基于 Drupal 9 的项目为例。项目树具有以下一般形状:

.
├── .eslintrc.js
├── node_modules
├── package-lock.json
├── package.json
└── web
    ├── .eslintrc.json
    └── modules
        └── custom
            └── some_module
                ├── .eslintrc.js
                ├── node_modules
                ├── package-lock.json
                └── package.json

如您所见,该项目在存储库的根目录下有一个 ESLint 配置文件,和许多项目一样,但在 some_module 特定于该模块的设置目录。

到目前为止一切顺利。但是,Drupal 9 还在 web 目录中分发了自己的内部 ESLint 配置文件。如果我在 Drupal 核心上工作,该配置文件会很有帮助,但我不是。尽管如此,它存在于我真正关心的两个 ESLint 配置文件之间会干扰我想要的 ESLint 配置,并且实际上会导致从存储库根目录调用 ESLint 失败。

是否可以配置ESLint读取some_module/.eslintrc.js配置文件和.eslintrc.js配置文件在版本库的根目录,但是忽略中间的web/.eslintrc.json?

经过一番研究和思考,我意识到extends关键字可以帮助解决这个问题。我最终将以下内容添加到 some_module/.eslintrc.js 配置文件中:

module.exports = {
  // Do not search for ESLint configuration files in parent directories because
  // Drupal 9 puts one in the *web* directory which we do not want applied.
  //
  // However, do manually extend from the ESLint configuration at the root of
  // this repository.
  root: true,
  extends: ["../../../../.eslintrc.js"],

  // [other ESlint configuration]
};

这两行告诉 ESLint 它不应该在 some_module 的父目录中搜索 ESLint 配置文件,而是应该手动读取和应用 ESLint 配置在存储库的根目录中,实际上完全跳过了 web/.eslintrc.json 配置文件。