Unmet peer deps with workspaces

Do you want to request a feature or report a bug?


What is the current behavior?
In workspaces, peerDependencies that are also present as devDependencies are reported as unmet.

If the current behavior is a bug, please provide the steps to reproduce.
Clone https://github.com/sky87/unmet-peer-deps-issue, run

$ yarn
yarn install v1.6.0
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "workspace-aggregator-b6d53714-1712-40de-af51-af5d0487ed3e > a@1.0.0" has unmet peer dependency "react@^16.0.0".
warning "workspace-aggregator-b6d53714-1712-40de-af51-af5d0487ed3e > a@1.0.0" has unmet peer dependency "react-dom@^16.0.0".
[4/4] Building fresh packages...
success Saved lockfile.
Done in 4.49s.

What is the expected behavior?
Yarn should not issue a warning.

Notice that without workspaces everything works as expected.

$ rm -rf node_modules &&  mv package.json _package.json &&  cd packages/a && yarn
yarn install v1.6.0
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 2.04s.

Please mention your node.js, yarn and operating system version.

$ yarn -v
$ node -v
$ ver
Microsoft Windows [Version 10.0.16299.431]

Author: Fantashit

11 thoughts on “Unmet peer deps with workspaces

  1. I don’t think I’m using the workspace feature, but am getting the following error despite the fact that babel-runtime@6.26.0 is installed. I think it’s because I’m using devDependencies as well.

    warning “react-intl-cra > babel-preset-react-app@3.1.1” has unmet peer dependency “babel-runtime@^6.23.0”.

    My packages:

      "dependencies": {
        "babel-polyfill": "^6.26.0",
        "classnames": "^2.2.5",
        "eventemitter3": "^3.1.0",
        "history": "^4.7.2",
        "invariant": "^2.2.4",
        "lodash.debounce": "^4.0.8",
        "path-to-regexp": "2.2.1",
        "prop-types": "15.6.1",
        "query-string": "5.1.1",
        "react": "16.4.0",
        "react-bootstrap": "0.32.1",
        "react-delay-input": "^4.0.4",
        "react-dom": "16.4.0",
        "react-input-mask": "2.0.1",
        "react-intl": "^2.4.0",
        "react-loadable": "5.4.0",
        "react-overlays": "^0.8.3",
        "react-redux": "5.0.7",
        "redux": "^3.7.2",
        "redux-devtools-extension": "^2.13.2",
        "redux-logger": "^3.0.6",
        "redux-persist": "4.10.2",
        "redux-persist-crosstab": "^3.7.0",
        "reselect": "^3.0.1",
        "symbol-observable": "1.0.4"
      "devDependencies": {
        "bootstrap": "3",
        "grunt": "1.0.3",
        "grunt-contrib-less": "^1.4.1",
        "grunt-contrib-watch": "1.1.0",
        "grunt-minify-html": "^3.0.0",
        "less-plugin-autoprefix": "^1.5.1",
        "less-plugin-clean-css": "^1.5.1",
        "npm-run-all": "4.1.3",
        "react-intl-cra": "0.3.3",
        "react-intl-po": "2.2.2",
        "react-scripts": "1.1.4"
  2. Yea, I’m seeing this as well. We have our mono-repo broken into two workspaces. A services workspace, and a packages workspace. The projects in packages get imported into the services projects. We often want our packages to just define a peerDep for a certain library, so that the services have some flexibility on the exact version they install.

    The problem I run into is that any package that defines a peerDep, ends up throwing a warning, depsite the face that the dep is also installed as a devDep in that package, and the service that imports it has the peerDep installed into it’s main dependencies.

  3. This is a pretty serious annoyance as our project is growing. So many of our workspace packages depend on peerDeps that the list of warnings that mean nothing is growing and growing.


  4. Does anyone know if this is resolved with Yarn 2? I haven’t made the switch yet but I would be OK with having to in order to fix this.

  5. @rikkit I no longer have this problem with Yarn 2, 0 warning.

    Yarn 2 is more strict on the resolution of peerDependancies but allows to make optionalPeerDependencies and/or to overload the packages with missing peerDependencies.

Comments are closed.