De acuerdo con la documentación de ESLint , cuando se ejecuta ESLint, busca archivos de configuración en el directorio actual y en todos los directorios principales hasta el directorio raíz ( / ), el directorio de inicio o un directorio donde se especifica la opción root: true en un archivo de configuración de ESLint.
¿Es posible configurar ESLint para buscar archivos de configuración de ESLint en ciertos directorios principales, pero no en otros?
Para hacer las cosas más concretas, tome el ejemplo del proyecto basado en Drupal 9 en el que estoy trabajando actualmente. El árbol del proyecto tiene esta forma general:
. ├── .eslintrc.js ├── node_modules ├── package-lock.json ├── package.json └── web ├── .eslintrc.json └── modules └── custom └── some_module ├── .eslintrc.js ├── node_modules ├── package-lock.json └── package.jsonComo puede ver, el proyecto tiene un archivo de configuración de ESLint en la raíz del repositorio, como muchos proyectos, pero también hay un archivo de configuración de ESLint en el directorio some_module para configuraciones que son específicas de ese módulo.
Hasta aquí todo bien. Sin embargo, Drupal 9 también distribuye su propio archivo de configuración interno ESLint en el directorio web . Ese archivo de configuración sería útil si estuviera trabajando en el núcleo de Drupal, pero no es así. No obstante, su presencia entre los dos archivos de configuración de ESLint que realmente me interesan interfiere con mi configuración de ESLint deseada y, de hecho, hace que fallen las invocaciones de ESLint desde la raíz del repositorio.
¿Es posible configurar ESLint para leer el archivo de configuración some_module/.eslintrc.js y el archivo de configuración .eslintrc.js en la raíz del repositorio, pero ignorar el web/.eslintrc.json en el medio?
Después de investigar y pensar un poco, me di cuenta de que la palabra clave extends puede ayudar a resolver este problema. Terminé agregando lo siguiente al archivo de configuración 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] };Estas dos líneas le dicen a ESLint que no debe buscar archivos de configuración de ESLint en los directorios principales de some_module , sino que debe leer y aplicar manualmente la configuración de ESLint en la raíz del repositorio, omitiendo el archivo de configuración web/.eslintrc.json en total.