Skip to content

@nx/eslint/plugin fails to discover root eslint.config.mjs during project graph creation #32110

Description

@drewbitt

Current Behavior

It is recommended by eslint in monorepos to have just one eslint.config.mjs for flat config eslint/eslint#16960

Moving to this with nx, at times this has worked but I am currently getting stuck with errors for multiple folders with No ESLint configuration found in

pnpm exec nx graph

 NX   An error occurred while processing files for the @nx/eslint/plugin plugin
.
  - eslint.config.mjs: No ESLint configuration found in /Users/drewbitt/Documents/Repos/u-web/apps/e-portal-web/.mocks.

 - eslint.config.mjs: Error: No ESLint configuration found in /Users/drewbitt/Documents/Repos/u-web/apps/e-portal-web/.mocks.
    at CascadingConfigArrayFactory._finalizeConfigArray (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc/dist/eslintrc.cjs:4110:19)
    at CascadingConfigArrayFactory.getConfigArrayForFile (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc/dist/eslintrc.cjs:3899:21)
    at CLIEngine.isPathIgnored (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/eslint@9.32.0_jiti@2.4.2/node_modules/eslint/lib/cli-engine/cli-engine.js:1021:6)
    at LegacyESLint.isPathIgnored (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/eslint@9.32.0_jiti@2.4.2/node_modules/eslint/lib/eslint/legacy-eslint.js:767:20)
    at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:132:36
    at Array.map (<anonymous>)
    at internalCreateNodesV2 (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:119:64)
    at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:187:95
    at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/nx@21.3.8_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+helpers@0.5.17__@swc+types@0.1._3c2060414ed218fab9676aa47ca9d806/node_modules/nx/src/project-graph/plugins/utils.js:10:33
    at Array.map (<anonymous>)
    Error: No ESLint configuration found in /Users/drewbitt/Documents/Repos/u-web/apps/e-portal-web/.mocks.
        at CascadingConfigArrayFactory._finalizeConfigArray (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc/dist/eslintrc.cjs:4110:19)
        at CascadingConfigArrayFactory.getConfigArrayForFile (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc/dist/eslintrc.cjs:3899:21)
        at CLIEngine.isPathIgnored (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/eslint@9.32.0_jiti@2.4.2/node_modules/eslint/lib/cli-engine/cli-engine.js:1021:6)
        at LegacyESLint.isPathIgnored (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/eslint@9.32.0_jiti@2.4.2/node_modules/eslint/lib/eslint/legacy-eslint.js:767:20)
        at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:132:36
        at Array.map (<anonymous>)
        at internalCreateNodesV2 (/Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:119:64)
        at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/@nx+eslint@21.3.8_@babel+traverse@7.28.0_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+_4292e63c3b5011ab85804611468d4f60/node_modules/@nx/eslint/src/plugins/plugin.js:187:95
        at /Users/drewbitt/Documents/Repos/u-web/node_modules/.pnpm/nx@21.3.8_@swc-node+register@1.9.2_@swc+core@1.5.7_@swc+helpers@0.5.17__@swc+types@0.1._3c2060414ed218fab9676aa47ca9d806/node_modules/nx/src/project-graph/plugins/utils.js:10:33
        at Array.map (<anonymous>)

This likely occurs because the plugin's createNodesV2 function instantiates ESLint with only a cwd pointing to a subdirectory (new ESLint({ cwd: '...' })). This appears to trigger ESLint's legacy configuration discovery (.eslintrc.*), which fails because no such file exists in the subdirectory. The process does not correctly discover the root eslint.config.mjs.

Expected Behavior

  • The @nx/eslint/plugin should correctly use ESLint's flat config discovery mechanism. When new ESLint({ cwd: '...' }) is called, it should search upwards from the specified cwd to find the root eslint.config.mjs and use it to determine which files are ignored, without throwing an error.

  • The project graph should be generated successfully.

GitHub Repo

No response

Steps to Reproduce

  1. Create a new nx workspace.
  2. Configure the workspace to use eslint and a eslint.config.mjs file (flat config). Ensure there are no .eslintrc.* files.
  3. Create a library or application that contains a subdirectory with non-source files (e.g., a .mocks or test-data directory).
  4. Run nx graph
  5. Observe the "No ESLint configuration found" error.

Nx Report

Node           : 24.4.1
OS             : darwin-arm64
Native Target  : aarch64-macos
pnpm           : 10.12.4

nx                     : 21.3.8
@nx/js                 : 21.3.8
@nx/jest               : 21.3.8
@nx/eslint             : 21.3.8
@nx/workspace          : 21.3.8
@nx/cypress            : 21.3.8
@nx/devkit             : 21.3.8
@nx/eslint-plugin      : 21.3.8
@nx/module-federation  : 21.3.8
@nx/plugin             : 21.3.8
@nx/react              : 21.3.8
@nx/storybook          : 21.3.8
@nx/vite               : 21.3.8
@nx/web                : 21.3.8
@nx/webpack            : 21.3.8
typescript             : 5.8.2
---------------------------------------
Registered Plugins:
@nx/eslint/plugin
@nx/jest/plugin
@nx/storybook/plugin
@nx/react/router-plugin
---------------------------------------
Local workspace plugins:
@unsys-web/snowdrop-tools
---------------------------------------
Cache Usage: 0.00 B / 46.04 GB
---------------------------------------
⚠️ Unable to construct project graph.
... same error as before here regarding the graph

Failure Logs

Package Manager Version

pnpm 10.12.4

Operating System

  • macOS
  • Linux
  • Windows
  • Other (Please specify)

Additional Information

eslint 9.32.0

relevant nx.json

...
 "plugins": [
      {
         "plugin": "@nx/eslint/plugin",
         "options": {
            "targetName": "lint"
         }
      },
],
...
 "targetDefaults": {
      "lint": {
         "cache": true,
         "options": {
            "eslintConfig": "{workspaceRoot}/eslint.config.mjs"
         }
      }
   }

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions