skip to content
Notes && Anecdotes
Eslint logoEslint logo

[package] has unmet peer dependency

eslint

I’ll sometime see a warning telling me that a dependency (that I have installed) has an unmet peer dependency. I don’t know what that means, and I’ll usually either ignore it, or install it. So let’s learn: what is a peer dependency, and why do I get these warnings?

For this post, I’ll use eslint and eslint-config-airbnb as examples.

warning " > eslint-config-airbnb@18.2.0" has unmet peer dependency "eslint-plugin-import@^2.21.2".

What is a peer dependency?

A peer depencency is a dependency that a “plugin” package depends on you already having installed.

Why do we have peer dependecies?

In npm, each package can has its own dependencies and own versions of overlapping dependencies. There’s one use case where this falls down, however: plugins. A plugin package is meant to be used with another “host” package, even though it does not always directly use the host package. - nodejs.org: Peer Dependencies

For instance, my airbnb-config-airbnb@18.2.0 depends on a given set of eslint versions, but it’s not its own package requirment: the package depend on you having it installed.

Why would we want to use peer dependencies?

If eslint-config-airbnb included eslint as a regular requirement, it would have to expose a wrapper function around its own version of eslint. This is not necessarily wrong, but it wouldn’t be a plugin package any more, it would be a “wrapper” package. You would struggle mixing and matching different plugins in this wrapped version of airbnb-eslint cli.

What should I do with my missing peer dependecy?

Either install the package on the right hand side (the unmet peer dependency) or upgrade the package on the left (the complaining package).

Note that you can end up in a loop: where installing the peer dependency causes a different package to complain, which (when resolved) causes the first package to complain gain. Let’s give an example

Is there a way to install a package and its peer dependencies?

Yes, by replacing yarn add with npx install-peerdeps

npx install-peerdeps --dev eslint-config-airbnb

You’ll still however get warnings if you upgrade either the peer dependencies or eslint-config-airbnb, so it’s not a silver bullet.