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
- Create a new nx workspace.
- Configure the workspace to use eslint and a
eslint.config.mjs file (flat config). Ensure there are no .eslintrc.* files.
- Create a library or application that contains a subdirectory with non-source files (e.g., a
.mocks or test-data directory).
- Run
nx graph
- 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
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"
}
}
}
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 inThis likely occurs because the plugin's
createNodesV2function instantiates ESLint with only acwdpointing 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 rooteslint.config.mjs.Expected Behavior
The
@nx/eslint/pluginshould correctly use ESLint's flat config discovery mechanism. Whennew ESLint({ cwd: '...' })is called, it should search upwards from the specifiedcwdto find the rooteslint.config.mjsand 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
eslint.config.mjsfile (flat config). Ensure there are no.eslintrc.*files..mocksortest-datadirectory).nx graphNx Report
Failure Logs
Package Manager Version
pnpm 10.12.4
Operating System
Additional Information
eslint 9.32.0
relevant nx.json