Unable to resolve dependency tree error when installing npm packages

If you install the node modules using the latest node.js and npm version 7, you will get an error Unable to resolve dependency tree error when installing npm packages

In this tutorial, we will discuss what exactly “Unable to resolve dependency tree error when installing npm packages” is and how to fix this error.

What is Unable to resolve dependency tree error when installing npm packages?

Many developers are facing this issue while installing the dependencies in angular projects.

A similar issue was observed while installing the react-facebook-login package through npm version 7.

If you have recently updated the NPM to the latest version (v7) and tried to update or install the dependencies in your project, you might get a dependency tree error. 

npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: project-admin@11.0.0
npm ERR! Found: @angular/common@11.0.3
npm ERR! node_modules/@angular/common
npm ERR!   @angular/common@"11.0.3" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/common@"^9.1.0 || ^10.0.0" from @agm/core@3.0.0-beta.0
npm ERR! node_modules/@agm/core
npm ERR!   @agm/core@"3.0.0-beta.0" from the root project

What is causing the ERESOLVE unable to resolve dependency tree?

In the new version of npm (v7), by default, npm install will fail when it encounters conflicting peerDependencies. This issue was not happening in npm version 3 to 6 as it used to ignore the peerDependencies when building a package tree ultimately.

Take a look at the official NPM documentation on legacy-peer-deps for more info about peer dependencies in npm v7.

The differences between the two are below –

  • --legacy-peer-deps: ignore all peerDependencies when installing, in the style of npm version 4 through version 6.
  • --strict-peer-deps: fail and abort the install process for any conflicting peerDependencies when encountered. By default, npm will only crash for peerDependencies conflicts caused by the direct dependencies of the root project.

If the package cannot be installed because of overly strict peerDependencies that collide, it provides a way to move forward resolving the situation.

Use of legacy-peer-deps is not recommended, as it will not enforce the peerDependencies contract that meta-dependencies may rely on.

How to fix Unable to resolve dependency tree error when installing npm packages?

There are two solutions to resolve this issue. Let us look at each of those in detail.

Solution 1: Ignore the peerDependencies 

The easiest way to fix the issue is to pass an additional parameter –legacy-peer-deps to npm install. The --legacy-peer-deps tells the npm to ignore the peer dependencies and continue the installation of the package.

Try the below command to install the dependencies for your project.

npm install --save --legacy-peer-deps

You can also set this permanently by adding this into a configuration by running the below command.

npm config set legacy-peer-deps true

Note: In this solution, the peer dependencies will not be installed by default, even if you are using the latest version of NPM.

Solution 2: Using –force

The other solution is to use the --force flag. The -f or --force argument will force npm to fetch remote resources even if a local copy exists on disk.

Step 1: Delete the current node_modules. You can remove it by using the below command.

rm -rf node_modules

Step 2: Remove the package-lock.json by running the below command

rm package-lock.json

Step 3: Clear the npm cache and perform the clean installation with --force flag as shown below.

npm cache clean --force
npm install --force

By performing the above steps, you should resolve the issue successfully.

Conclusion

The Unable to resolve dependency tree error when installing npm packages occurs when you install the node dependencies with the latest version of NPM(v7).

The error is due to the strict peerDependencies that is set in the npm version 7, and as of npm v7, peerDependencies are installed by default which results in conflict and causes the issue.

We can resolve the ERESOLVE unable to resolve dependency tree by using the --force flag while installing the dependencies, or we can ignore the peerDependencies by passing an additional argument --legacy-peer-deps