Unmet peer deps with workspaces

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

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
1.6.0
$ node -v
v9.3.0
$ 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.

    Window_and_2__adamduro_Duros-MacBook____Workspace_projects_freebird_serverless-mono__zsh_

  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.