yarnpkg / yarnpkg/berry

[Feature] Support upstreaming / telemetry on packageExtensions

Open
#3,585 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
TypeScript
Stars
8.1k
Forks
1.3k
PR merge metrics
No merged PRs in 30d

Description

  • I'd be willing to implement this feature (contributing guide)
  • This feature is important to have in this repository; a contrib plugin wouldn't do

Describe the user story

As a developer, I often want to just install packages, but very often (too often), package creators do not fill their peer dependencies correctly. This invariably leads to huge .yarnrc.yml where we have to add peer dependencies to packages to avoid yarn YN0002 warnings.

Typical .yarnrc/yml:

packageExtensions:
  "@chakra-ui/accordion@1.3.6":
    peerDependencies:
      framer-motion: "*"
  "@chakra-ui/anatomy@1.0.0":
    peerDependencies:
      "@chakra-ui/system": "*"
  "@chakra-ui/skeleton@1.1.18":
    peerDependencies:
      "@chakra-ui/theme": "*"
      "@emotion/react": "*"
      "@emotion/styled": "*"
  "@chakra-ui/switch@1.2.9":
    peerDependencies:
      framer-motion: "*"
  "@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2":
    peerDependencies:
      typescript: "*"
  "@graphql-codegen/cli@1.21.4":
    peerDependencies:
      typescript: "*"
  "@storybook/core-server@*":
    peerDependencies:
      "@babel/core": "*"
  "@storybook/core@*":
    peerDependencies:
      "@babel/core": "*"
      webpack: "*"
  "@storybook/store@*":
    peerDependencies:
      "react": "*"
      "react-dom": "*"
  "@storybook/csf-tools@*":
    peerDependencies:
      "@babel/core": "*"
  "@parcel/packager-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/plugin@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/types@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/bundler-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/compressor-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/namer-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-cssnano@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-htmlnano@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-image@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-svgo@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-terser@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/reporter-dev-server@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/resolver-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-browser-hmr@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-react-refresh@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-service-worker@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-babel@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-image@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-json@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-postcss@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-posthtml@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-react-refresh-wrap@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  eslint-config-airbnb-typescript@12.3.1:
    peerDependencies:
      eslint: "*"
      eslint-plugin-import: "*"
      eslint-plugin-jsx-a11y: "*"
      eslint-plugin-react: "*"
      eslint-plugin-react-hooks: "*"
  graphql-config@*:
    peerDependencies:
      typescript: "*"
  apollo-server-micro@*:
    peerDependencies:
      graphql: "*"
  next@*:
    peerDependencies:
      "@babel/core": "*"
  react-dev-utils@11.0.4:
    peerDependencies:
      typescript: "*"
      webpack: "*"
  styled-jsx@*:
    peerDependencies:
      "@babel/core": "*"
  next-auth@*:
    peerDependencies:
      "@prisma/client": "*"

Describe the solution you'd like

Maybe there could be a way for yarn to add some telemetry to this part of the code, and have a central source of truth, to let package creators know about their bad peerDeps ?

Opening issues automatically on repos sounds a bit difficult, but just have a central place to report it at least would be helpful ?

Describe the drawbacks of your solution

Need to maintain this solution.

Describe alternatives you've considered

I stopped bothering enough to open issues every time I have issues with peerDeps in packages I use.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue names no source files or tests. Start by tracing packageExtensions handling and review the linked contributing guide; define how reports would be collected and where a central source of truth would live. Done would mean a documented telemetry path that reports suspected peer-dependency problems to package creators.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript
Domain
developer-experience, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.