Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unmet peer deps with workspaces #5810

Closed
sky87 opened this issue May 11, 2018 · 23 comments
Closed

Unmet peer deps with workspaces #5810

sky87 opened this issue May 11, 2018 · 23 comments
Assignees
Labels
cat-bug fixed-in-modern This issue has been fixed / implemented in Yarn 2+.

Comments

@sky87
Copy link

sky87 commented May 11, 2018

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]
@ghost
Copy link

ghost commented Jun 6, 2018

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"
  }
}

@ghost
Copy link

ghost commented Jun 6, 2018

Actually, I get the same error even when I merge all of my dependencies under "dependencies" in package.json. I am using yarn v1.7.0.

I don't get this error in either situation when using npm v5.5.1.

@sheepsteak
Copy link
Contributor

@waynebloss you say you have babel-runtime installed but I can’t actually see it in your dependencies.

I reckon yarn add babel-runtime will fix it.

@ghost
Copy link

ghost commented Jun 7, 2018

@sheepsteak babel-runtime is a deep dependency of react-scripts, which I have in my devDependencies.

@milesj
Copy link

milesj commented Jun 7, 2018

@waynebloss Peer dep requirements need to be explicitly defined, not implicit.

@hulkish
Copy link
Contributor

hulkish commented Jun 22, 2018

i wonder if this pr may fix this. @rally25rs https://github.com/yarnpkg/yarn/pull/6012/files

@panjiesw
Copy link

Getting this issue with yarn v1.9.2. I haven't tried putting the deps in dependencies instead of devDependencies. According to #4743 it should have been fixed.

@stdlo
Copy link

stdlo commented Aug 3, 2018

I'm also affected over here. I'm also using lerna, however if I do a yarn install in each package without workspaces I don't get any warnings so I believe this is related.

node: v8.11.1
yarn: v1.7.0
lerna: 2.11.0

output:

yarn install v1.7.0
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning " > babel-jest@22.4.4" has unmet peer dependency "babel-core@^6.0.0 || ^7.0.0-0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > gateway > graphql-tools@3.0.2" has incorrect peer dependency "graphql@^0.12.0 || ^0.13.0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > glamorous@4.13.1" has unmet peer dependency "glamor@>=2".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > @storybook/addon-actions@3.4.7" has unmet peer dependency "@storybook/addons@^3.3.0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > @storybook/addon-links@3.4.7" has unmet peer dependency "@storybook/addons@^3.3.0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > @storybook/react@3.4.7" has unmet peer dependency "babel-core@^6.26.0 || ^7.0.0-0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > @storybook/react@3.4.7" has unmet peer dependency "babel-runtime@>=6.0.0".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > @storybook/react > babel-loader@7.1.4" has unmet peer dependency "babel-core@6".
warning "workspace-aggregator-bdf52bd9-faef-446f-a675-253d9ed02956 > client > redux-first-router-link@0.0.3-rudy" has incorrect peer dependency "redux-first-router@rudy".
[4/4] Building fresh packages...

@sbonami
Copy link

sbonami commented Mar 29, 2019

Bumping as this is still an issue in yarn 1.15

@duro
Copy link

duro commented Mar 30, 2019

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.

@duro
Copy link

duro commented Apr 24, 2019

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_

@loopmode
Copy link

Just my two cents..:
I wish I could mute these warnings by defining peerDependencies in the workspace root package.json.

The workspace is private anyways, it will not be consumed by any packages, so it's "peerDeendencies" field is basically unused.
We could use it to define "nested peer dependencies", e.g. tell yarn and the workspace that these dependencies are somehow provided by workspace packages.

Whenever yarn would complain about a missing peer dependency, it could now check if the dependency in question is defined in the workspace peerDependencies, and if so, omit the warning.

fastfrwrd pushed a commit to spotify/web-scripts that referenced this issue Jun 26, 2019
peerDependencies in the packages were throwing warnings, potentially related to
yarnpkg/yarn#5810. In this commit, we rework the peerDependency
definitions to align better with the conventions outlined in the main peerDependency documentation,
and we define devDependencies both at the top level and at the package level, since package-level is
technically closer to "correct" but it doesn't satisfy the checks in yarn yet. In addition, we've
bumped a few versions and aligned across the packages where duplication occurs, which led to our
tests running into jsx-eslint/eslint-plugin-react#2329 for our "detect"
mode in eslint-plugin-react.
fastfrwrd pushed a commit to spotify/web-scripts that referenced this issue Jun 26, 2019
peerDependencies in the packages were throwing warnings, potentially related to
yarnpkg/yarn#5810. In this commit, we rework the peerDependency
definitions to align better with the conventions outlined in the main peerDependency documentation,
and we define devDependencies both at the top level and at the package level, since package-level is
technically closer to "correct" but it doesn't satisfy the checks in yarn yet. In addition, we've
bumped a few versions and aligned across the packages where duplication occurs, which led to our
tests running into jsx-eslint/eslint-plugin-react#2329 for our "detect"
mode in eslint-plugin-react.
@TidyIQ
Copy link

TidyIQ commented Jul 10, 2019

Bumping for update

@lcswillems
Copy link

Same issue for me. I checked my peer dependencies. They are correct but I get these warnings

@maneetgoyal
Copy link

Same issue :(

vvanpo added a commit to vvanpo/vue-test-utils that referenced this issue Nov 5, 2019
Common build dependencies across sub-packages can get out-of-sync over
time. Currently, `rollup` and plugins is used across both `test-utils`
and `server-test-utils`, but different versions are specified. This
requires duplicate installations, and prevents hoisting.

Since `devDependencies` are not present in published packages, and since
the monorepo is used exclusively for building the subpackages, it makes
sense to define all build dependencies in the root package.

Move all `devDependencies` in the root package to `dependencies`, to
avoid unmet peer dependency errors in `yarn`:
yarnpkg/yarn#5810

Update each of these dependencies to their latest version, in particular
`rollup`, which has since released stable versions.

See https://github.com/lerna/lerna/blob/master/doc/hoist.md#lerna-hoisting
kazupon pushed a commit to vuejs/vue-test-utils that referenced this issue Nov 8, 2019
* Update lockfile

`yarn install` was failing with newer node versions (>=10) because the
version of fsevents was too old (no precompiled binaries), and node-gyp
would fail to build it.

`yarn upgrade` mitigates this issue, but a change in `prettier` 1.18
(https://prettier.io/blog/2019/06/06/1.18.0.html) required `yarn format`
to also be run.

A missing dependency (`rollup-plugin-json`) was added to
`@vue/test-utils`, as it is imported in its build script.

* Update compatibility test versions

Update minor versions of running `yarn test:compat` to the latest patch
revisions.

Add optional argument to `yarn test:compat`, to allow running tests
against arbitrary `vue` versions.

Run compatibility tests in reverse order, to ensure the most relevant
test failures are displayed.

Run `yarn add` non-interactively, to force errors if `yarn test:compat`
is passed an invalid value.

Run `yarn add` without clobbering the lockfile.

* Update CircleCI config for compatibility tests

Having each compatibility test version specified in both the CI config
and the package script leads to inconsistencies over time. The CI config
can just use the package script.

* Hoist dev dependencies explicitly

Common build dependencies across sub-packages can get out-of-sync over
time. Currently, `rollup` and plugins is used across both `test-utils`
and `server-test-utils`, but different versions are specified. This
requires duplicate installations, and prevents hoisting.

Since `devDependencies` are not present in published packages, and since
the monorepo is used exclusively for building the subpackages, it makes
sense to define all build dependencies in the root package.

Move all `devDependencies` in the root package to `dependencies`, to
avoid unmet peer dependency errors in `yarn`:
yarnpkg/yarn#5810

Update each of these dependencies to their latest version, in particular
`rollup`, which has since released stable versions.

See https://github.com/lerna/lerna/blob/master/doc/hoist.md#lerna-hoisting

* Remove build step from compatibility tests

Each compatibility test installs a legacy version of `vue`, and builds
each package against this version before running the test suites. This
is assumedly in error, as the only build that gets published is the one
built against the dependencies in the lockfile.

To properly test compatibility for consumers using older versions of
`vue` to satisfy each package's peer dependency, we need to test against
the build that would actually get published. The fix is to run `yarn
build:test` only once, before any compatibility tests are run.

* Relax rollup dependency constraints

The upgrade from `rollup` beta -> stable went without breakages, so
clearly we don't need to overly constrain updated dependencies using the
`^` semver specifier.

* Revert locked dependencies

The updates from 1d6950a have to be partially reverted to allow for the
last compatiblity test suite to pass: `vue@2.0.8`. There is some unclear
combination of dependencies that causes 80 unit test failures for only
the 2.0 version of vue.
@hjemmel
Copy link

hjemmel commented Dec 19, 2019

same issue here

@antoine-malliarakis
Copy link

antoine-malliarakis commented Jan 10, 2020

Same issue here with yarn 1.21.1.
And seems to be present also if the dependency is a production declared one.

@MrCheater
Copy link

+1

@rikkit
Copy link

rikkit commented May 28, 2020

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.

@bertho-zero
Copy link
Contributor

@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.

@damrem
Copy link

damrem commented Nov 24, 2020

same here with yarn@1.22.5

@merceyz
Copy link
Member

merceyz commented Jan 3, 2021

Closing as fixed in v2

https://yarnpkg.com/getting-started/migration

@merceyz merceyz closed this as completed Jan 3, 2021
@merceyz merceyz added the fixed-in-modern This issue has been fixed / implemented in Yarn 2+. label Jan 3, 2021
NiGhTTraX added a commit to NiGhTTraX/ts-monorepo that referenced this issue Apr 28, 2021
This silences the yarn warning for missing peer dependency for
`@nighttrax/components`. This is actually a bug in yarn:
yarnpkg/yarn#5810. I don't particularly like
the workaround, but better than a noisy warning, I guess?

Fixes #60.
NiGhTTraX added a commit to NiGhTTraX/eslint-config that referenced this issue Dec 29, 2021
@diegodorado
Copy link

Why is this closed? React Native projects do not play nicely with yarn 2, and all these warnings are annoying

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cat-bug fixed-in-modern This issue has been fixed / implemented in Yarn 2+.
Projects
None yet
Development

No branches or pull requests