DEV Community

Samit Kapoor
Samit Kapoor

Posted on

--legacy-peer-deps vs --force: Understanding npm's conflict resolvers

If you've ever been stuck while installing a package in a Node.js project and found yourself using --legacy-peer-deps or --force without really knowing what they do then, you're not alone.

These flags often appear when there are conflicts in peerDependencies, but what exactly do they mean, and which one should you use?

Let’s break it down.

The Problem: Dependency Conflicts in npm

Dependency conflicts happen when different packages in your project require incompatible versions of the same dependency.

For example, one package might need react@17 while another expects react@18. Since there's no clean way to install multiple versions of the same package simultaneously, npm throws an error.

These conflicts usually indicate that your project's dependency tree is either fragile, outdated, or includes libraries that haven’t been updated to support newer versions of their peers.

To bypass these errors, npm provides two commonly used flags:

  • --legacy-peer-deps
  • --force

Let's understand them one by one.

--legacy-peer-deps

When you use --legacy-peer-deps, here's what it means:

  • Ignore the peer dependency conflicts.
  • Doesn't attempt to automatically install peer dependency.
  • Avoid breaking the dependency tree.

Use this when:

  • You're using older packages that haven't updated yet.
  • You want to avoid forcing incompatible versions together.

Example:

npm i some-package --legacy-peer-deps
Enter fullscreen mode Exit fullscreen mode

--force

When you use --force, here's what it means:

  • Forcefully install the package even if the tree is already broken.
  • Potentially lead to unstable project.
  • Overrides dependency conflicts, peer mismatches, etc.

Use this when:

  • You're just testing out things quickly.
  • You know what you're doing and can resolve conflicts later if required.

Example:

npm i some-package --force
Enter fullscreen mode Exit fullscreen mode

Which one should you choose?

  • Use --legacy-peer-deps when you're facing peer dependency issues with older libraries.

  • Avoid --force unless you're experimenting or absolutely sure of what you're doing.


Hi, I’m Samit, a software developer and freelancer passionate about building real world projects. If you’re looking to collaborate or just want to say hi, check out my portfolio. Let’s connect!

Top comments (0)