[BUG] NPM unable to resolve dependency tree when using overrides
Is there an existing issue for this?
- [x] I have searched the existing issues
This issue exists in the latest npm version
- [x] I am using the latest npm
Current Behavior
We ran into issue when switching to NPM v11 (from NPM v10) and our project fails to install.
When running npm ci (against lockfile generated by NPM v10) we recieve JavaScript Heap Out of Memory error. The process cannot be aborted via Control + C, it seems to be stuck in an infinite loop and eventually hits the memory limit.
When running npm install with package-lock.json file deleted, we get an error when resolving peer dependencies. This might be a better hint about where the error comes from.
I was able to create minimalistic project, where the conflicting dependencies are reported, unfortunately the Out of Memory error cannot be reproduced there, but I believe, it is somewhat connected.
Minimalistic project contains 3 packages, all have the same version 1.0.0 and they are all depending on each other via peerDependencies (you install one, you install all, there is a circular dependency, which is not good, but NPM was able to handle this until now). Specifically:
package-ahas a peer dependency topackage-cpackage-bhas a peer dependency topackage-apackage-chas a peer dependency topackage-a
This would still work, but the issue appears once you have a package.json like this.
{
"name": "web",
"version": "0.0.0",
"dependencies": {
"package-a": "1.0.0",
"package-b": "1.0.0",
"package-c": "1.0.0"
},
"overrides": {
"package-b": "1.0.0",
"package-c": "1.0.0"
}
}
The problematic part is the overrides configuration. If you remove one of the dependencies from overrides, everything works as expected again, but by overriding 2 packages that both have a peer dependency to package-a, you receive an error in conflict resolution.
I am getting this error, which does not really make any sense, because there is no real conflict. All the versions used are 1.0.0. But the very same issue happens even if I set all peerDependencies to *.
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: [email protected]
npm error Found: [email protected]
npm error node_modules/package-a
npm error package-a@"1.0.0" from the root project
npm error peer package-a@"1.0.0" from [email protected]
npm error node_modules/package-b
npm error package-b@"1.0.0" from the root project
npm error
npm error Could not resolve dependency:
npm error peer package-a@"1.0.0" from [email protected]
npm error node_modules/package-c
npm error package-c@"1.0.0" from the root project
npm error peer package-c@"1.0.0" from [email protected]
npm error node_modules/package-a
npm error package-a@"1.0.0" from the root project
npm error 1 more (package-b)
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /Users/filip.satek/.npm/_logs/2025-07-30T05_44_45_627Z-eresolve-report.txt
npm error A complete log of this run can be found in: /Users/filip.satek/.npm/_logs/2025-07-30T05_44_45_627Z-debug-0.log
Expected Behavior
No memory error, no conflicting dependency error.
Steps To Reproduce
The issue has been introduced in NPM v11.2.0 (but has not been addressed yet) via this commit by @owlstronaut (sorry for tagging, but you probably have the best understanding of the problem).
npm install -g [email protected]git clone [email protected]:Filipoliko/npm-install-overrides-error.git npm-install-overrides-errorcd npm-install-overrides-errornpx --registry https://registry.npmjs.org/ verdaccio --config ./verdaccio.yaml(and leave it running)- Open new terminal
./publish.shnpm install
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: [email protected]
npm error Found: [email protected]
npm error node_modules/package-a
npm error package-a@"1.0.0" from the root project
npm error peer package-a@"1.0.0" from [email protected]
npm error node_modules/package-b
npm error package-b@"1.0.0" from the root project
npm error
npm error Could not resolve dependency:
npm error peer package-a@"1.0.0" from [email protected]
npm error node_modules/package-c
npm error package-c@"1.0.0" from the root project
npm error peer package-c@"1.0.0" from [email protected]
npm error node_modules/package-a
npm error package-a@"1.0.0" from the root project
npm error 1 more (package-b)
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /Users/filip.satek/.npm/_logs/2025-07-30T05_44_45_627Z-eresolve-report.txt
npm error A complete log of this run can be found in: /Users/filip.satek/.npm/_logs/2025-07-30T05_44_45_627Z-debug-0.log
The same issue can be reproduced even with npm pack, but the error message is not as nice. See the project README.md for details how to check the npm pack version.
Environment
- npm: 11.5.1
- Node.js: 24.4.1
- OS Name: MacOS Sequoia 15.5
- System Model Name: Macbook Pro
- npm config:
; "user" config from /Users/filip.satek/.npmrc
; //localhost:4873/:_authToken = (protected) ; overridden by project
//registry.npmjs.org/:_authToken = (protected)
; registry = "https://registry.npmjs.org/" ; overridden by project
strict-ssl = true
; "project" config from /Users/filip.satek/git/npm-install-overrides-error/.npmrc
//localhost:4873/:_authToken = (protected)
registry = "http://localhost:4873"
; node bin location = /Users/filip.satek/.nvm/versions/node/v24.3.0/bin/node
; node version = v24.3.0
; npm local prefix = /Users/filip.satek/git/npm-install-overrides-error
; npm version = 11.5.1
; cwd = /Users/filip.satek/git/npm-install-overrides-error
; HOME = /Users/filip.satek
; Run `npm config ls -l` to show all defaults.
Thanks for the awesome report, @Filipoliko!
We started getting a similar/same error in our project. The application uses react@18 and we wanna pin down the @emotion/react, @emotion/styled, and @mui/material. They all specify peer react@">=16.8.0".
"overrides": {
"@emotion/react": "^11.13.5",
"@emotion/styled": "^11.13.5",
"@mui/material": "^5.15.17",
"zustand": "^4.5.5",
"jquery": "^3.7.1"
},
On npm install the following error will appear:
'Log files:
# npm resolution error report
While resolving: corporation-core@undefined
Found: [email protected]
node_modules/react
react@"18.3.1" from the root project
peer react@"^18.0.0" from @corporation/[email protected]
node_modules/@corporation/lib
@corporation/lib@"9.3.0-staging.32" from the root project
peer react@">=16.8.0" from @emotion/[email protected]
node_modules/@emotion/react
@emotion/react@"^11.13.5" from the root project
peer @emotion/react@"^11.13.5" from @corporation/[email protected]
node_modules/@corporation/lib
@corporation/lib@"9.3.0-staging.32" from the root project
peer overridden @emotion/react@"^11.13.5" (was "^11.0.0-rc.0") from @emotion/[email protected]
node_modules/@emotion/styled
@emotion/styled@"^11.13.5" from the root project
peer @emotion/styled@"^11.13.5" from @corporation/[email protected]
node_modules/@corporation/lib
@corporation/lib@"9.3.0-staging.32" from the root project
Could not resolve dependency:
peer react@">=16.8.0" from @emotion/[email protected]
node_modules/@emotion/styled
@emotion/styled@"^11.13.5" from the root project
peer @emotion/styled@"^11.13.5" from @corporation/[email protected]
node_modules/@corporation/lib
@corporation/lib@"9.3.0-staging.32" from the root project
Fix the upstream dependency conflict, or retry
this command with --force or --legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
UPD: The install went through after adding the react and react-dom to the overrides 👀👀👀
Just tried updating to NPM v11.6.1 (which resolves some peer dependencies related bugs), but it did not fix this issue.
Click here to see the verbose log.
0 verbose cli /Users/filip.satek/.nvm/versions/node/v24.8.0/bin/node /Users/filip.satek/.nvm/versions/node/v24.8.0/bin/npm
1 info using [email protected]
2 info using [email protected]
3 silly config load:file:/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/npmrc
4 silly config load:file:/Users/filip.satek/git/github-npm-install-overrides-error/.npmrc
5 silly config load:file:/Users/filip.satek/.npmrc
6 silly config load:file:/Users/filip.satek/.nvm/versions/node/v24.8.0/etc/npmrc
7 verbose title npm i
8 verbose argv "i"
9 verbose logfile logs-max:10 dir:/Users/filip.satek/.npm/_logs/2025-09-25T06_52_43_629Z-
10 verbose logfile /Users/filip.satek/.npm/_logs/2025-09-25T06_52_43_629Z-debug-0.log
11 silly logfile start cleaning logs, removing 1 files
12 silly packumentCache heap:4496293888 maxSize:1124073472 maxEntrySize:562036736
13 silly logfile done cleaning log files
14 silly idealTree buildDeps
15 silly fetch manifest [email protected]
16 silly packumentCache full:http://localhost:4873/package-a cache-miss
17 http fetch GET 200 http://localhost:4873/package-a 18ms (cache revalidated)
18 silly packumentCache full:http://localhost:4873/package-a set size:973 disposed:false
19 silly fetch manifest [email protected]
20 silly packumentCache full:http://localhost:4873/package-c cache-miss
21 http fetch GET 200 http://localhost:4873/package-c 3ms (cache revalidated)
22 silly packumentCache full:http://localhost:4873/package-c set size:973 disposed:false
23 silly fetch manifest [email protected]
24 silly packumentCache full:http://localhost:4873/package-b cache-miss
25 http fetch GET 200 http://localhost:4873/package-b 3ms (cache revalidated)
26 silly packumentCache full:http://localhost:4873/package-b set size:973 disposed:false
27 silly Conflicting override sets <ref *1> OverrideSet {
27 silly Conflicting override sets parent: OverrideSet {
27 silly Conflicting override sets parent: undefined,
27 silly Conflicting override sets children: Map(2) {
27 silly Conflicting override sets 'package-b' => [Circular *1],
27 silly Conflicting override sets 'package-c' => [OverrideSet]
27 silly Conflicting override sets }
27 silly Conflicting override sets },
27 silly Conflicting override sets children: Map(0) {},
27 silly Conflicting override sets name: 'package-b',
27 silly Conflicting override sets key: 'package-b',
27 silly Conflicting override sets keySpec: '*',
27 silly Conflicting override sets value: '1.0.0'
27 silly Conflicting override sets } <ref *1> OverrideSet {
27 silly Conflicting override sets parent: OverrideSet {
27 silly Conflicting override sets parent: undefined,
27 silly Conflicting override sets children: Map(2) {
27 silly Conflicting override sets 'package-b' => [OverrideSet],
27 silly Conflicting override sets 'package-c' => [Circular *1]
27 silly Conflicting override sets }
27 silly Conflicting override sets },
27 silly Conflicting override sets children: Map(0) {},
27 silly Conflicting override sets name: 'package-c',
27 silly Conflicting override sets key: 'package-c',
27 silly Conflicting override sets keySpec: '*',
27 silly Conflicting override sets value: '1.0.0'
27 silly Conflicting override sets }
28 silly Conflicting override sets package-a
29 silly Conflicting override sets <ref *1> OverrideSet {
29 silly Conflicting override sets parent: OverrideSet {
29 silly Conflicting override sets parent: undefined,
29 silly Conflicting override sets children: Map(2) {
29 silly Conflicting override sets 'package-b' => [OverrideSet],
29 silly Conflicting override sets 'package-c' => [Circular *1]
29 silly Conflicting override sets }
29 silly Conflicting override sets },
29 silly Conflicting override sets children: Map(0) {},
29 silly Conflicting override sets name: 'package-c',
29 silly Conflicting override sets key: 'package-c',
29 silly Conflicting override sets keySpec: '*',
29 silly Conflicting override sets value: '1.0.0'
29 silly Conflicting override sets } <ref *1> OverrideSet {
29 silly Conflicting override sets parent: OverrideSet {
29 silly Conflicting override sets parent: undefined,
29 silly Conflicting override sets children: Map(2) {
29 silly Conflicting override sets 'package-b' => [Circular *1],
29 silly Conflicting override sets 'package-c' => [OverrideSet]
29 silly Conflicting override sets }
29 silly Conflicting override sets },
29 silly Conflicting override sets children: Map(0) {},
29 silly Conflicting override sets name: 'package-b',
29 silly Conflicting override sets key: 'package-b',
29 silly Conflicting override sets keySpec: '*',
29 silly Conflicting override sets value: '1.0.0'
29 silly Conflicting override sets }
30 verbose stack Error: unable to resolve dependency tree
30 verbose stack at #failPeerConflict (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1407:25)
30 verbose stack at #loadPeerSet (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1400:29)
30 verbose stack at async #loadPeerSet (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1352:23)
30 verbose stack at async #loadPeerSet (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1352:23)
30 verbose stack at async #buildDepStep (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:916:11)
30 verbose stack at async Arborist.buildIdealTree (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:182:7)
30 verbose stack at async Promise.all (index 1)
30 verbose stack at async Arborist.reify (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:117:5)
30 verbose stack at async Install.exec (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/lib/commands/install.js:150:5)
30 verbose stack at async Npm.exec (/Users/filip.satek/.nvm/versions/node/v24.8.0/lib/node_modules/npm/lib/npm.js:208:9)
31 error code ERESOLVE
32 error ERESOLVE unable to resolve dependency tree
33 error
34 error While resolving: [email protected]
34 error Found: [email protected][2m[22m
34 error [2mnode_modules/package-a[22m
34 error package-a@"1.0.0" from the root project
34 error [95mpeer[39m package-a@"1.0.0" from [email protected][2m[22m
34 error [2mnode_modules/package-b[22m
34 error package-b@"1.0.0" from the root project
34 error
34 error Could not resolve dependency:
34 error [95mpeer[39m package-a@"1.0.0" from [email protected][2m[22m
34 error [2mnode_modules/package-c[22m
34 error package-c@"1.0.0" from the root project
34 error [95mpeer[39m package-c@"1.0.0" from [email protected][2m[22m
34 error [2mnode_modules/package-a[22m
34 error package-a@"1.0.0" from the root project
34 error 1 more (package-b)
34 error
34 error Fix the upstream dependency conflict, or retry
34 error this command with --force or --legacy-peer-deps
34 error to accept an incorrect (and potentially broken) dependency resolution.
35 error
35 error
35 error For a full report see:
35 error /Users/filip.satek/.npm/_logs/2025-09-25T06_52_43_629Z-eresolve-report.txt
36 silly unfinished npm timer reify 1758783163849
37 silly unfinished npm timer reify:loadTrees 1758783163851
38 silly unfinished npm timer idealTree:buildDeps 1758783163858
39 silly unfinished npm timer idealTree:#root 1758783163858
40 verbose cwd /Users/filip.satek/git/github-npm-install-overrides-error
41 verbose os Darwin 25.0.0
42 verbose node v24.8.0
43 verbose npm v11.6.1
44 verbose exit 1
45 verbose code 1