cli icon indicating copy to clipboard operation
cli copied to clipboard

`config` ignores `peerDependencies` and instead reads `devDependencies`

Open tido64 opened this issue 1 year ago • 2 comments

Description

config ignores peerDependencies and instead reads devDependencies:

https://github.com/react-native-community/cli/blob/33646ef94a8cb4f9ce10d6db336c7a124144025b/packages/cli-config/src/findDependencies.ts#L18-L21

This leads to errors in react-native-windows autolinking (and possibly in other scenarios) where dependencies are only declared under peerDependencies and not devDependencies, for instance in @react-native-webapis/web-storage we have the following:

{
  "peerDependencies": {
    "@callstack/react-native-visionos": ">=0.73",
    "react": ">=18.2.0",
    "react-native": ">=0.72",
    "react-native-macos": ">=0.72",
    "react-native-windows": ">=0.72"
  },
  "peerDependenciesMeta": {
    "@callstack/react-native-visionos": {
      "optional": true
    },
    "react-native-macos": {
      "optional": true
    },
    "react-native-windows": {
      "optional": true
    }
  },
  "devDependencies": {
    "react-native": "^0.73.0"
  }
}

In this case, config outputs:

  "platforms": {
    "ios": {},
    "android": {}
  },

If I add react-native-windows to devDependencies, config outputs:

  "platforms": {
    "ios": {},
    "android": {},
    "windows": {
      "npmPackageName": "react-native-windows"
    }
  },

In my opinion, the correct fix should be to replace devDependencies with peerDependencies, but I don't know if this will break current scenarios so we should probably keep it as is and just add peerDependencies to the list in findDependencies.ts.

Reproducible Demo

In any project, you can run the following:

yarn add @react-native-webapis/[email protected]
cd node_modules/@react-native-webapis/web-storage
yarn react-native config

tido64 avatar Jun 20 '24 08:06 tido64

@thymikee: Let me know what you think. I can submit a fix once we agree on a solution.

tido64 avatar Jun 20 '24 08:06 tido64

Ideally we should rely on peerDependencies not on devDependencies and I'm totally fine with adding peerDependencies to the places that we check. But removing devDependencies sounds like a breaking change 😕

szymonrybczak avatar Jun 20 '24 18:06 szymonrybczak

There hasn't been any activity on this issue in the past 3 months, so it has been marked as stale and it will be closed automatically if no further activity occurs in the next 7 days.

github-actions[bot] avatar Sep 20 '24 03:09 github-actions[bot]