byCedric / expo-monorepo-example

Fast pnpm monorepo for cross-platform apps built with Expo / React Native and React.
https://docs.expo.dev/guides/monorepos/
MIT License
720 stars 76 forks source link

Invalid `Podfile` file: [codegen] Could not find react-native-codegen #104

Closed 8times4 closed 5 months ago

8times4 commented 1 year ago

Description of the bug

Wrong path for reactNativePath

To Reproduce

What steps did you perform which led to this issue?

  1. Go to apps/mobile
  2. run npx expo prebuild -p ios
  3. Get the error.

Expected behavior

prebuild to pass.

Actual behavior

✔ Created native project | gitignore skipped
✔ Updated package.json and added index.js entry point for iOS and Android
› Installing using pnpm
> pnpm install
✔ Config synced
⚠️  Something went wrong running `pod install` in the `ios` directory.
Command `pod install` failed.
└─ Cause: Invalid `Podfile` file: [codegen] Could not find react-native-codegen..

 #  from /Users/8x4/expo-monorepo-example/apps/mobile/ios/Podfile:50
 #  -------------------------------------------
 #  
 >    use_react_native!(
 #      :path => config[:reactNativePath],
 #  -------------------------------------------

Additional context

Podfile use_react_native! func:

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    :fabric_enabled => flags[:fabric_enabled],
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
    :flipper_configuration => flipper_config
  )

if :path => config[:reactNativePath], is replaced with :path => "../../../node_modules/react-native" then it works, even though react-native exists in my node_modules within apps/mobile.


(base) ➜  react-native git:(main) ✗ pwd
/Users/8x4/expo-monorepo-example/apps/mobile/node_modules/react-native

I have tried with both @react-native/codegen and react-native-codegen, they're defined as deps in apps/mobile/package.json the package only exists in the root node_modules, not in the apps/mobile/node_modules

I'm using an M1 Mac.

Thank you, 8x4

makozlo commented 10 months ago

My team has also been experiencing this error lately, and it's been a major blocker. I just did a fresh clone of this repo, installed dependencies, navigated to the mobile directory, tried to run the app, and got this error.

Environment

node: 18.16.0
pnpm: 8.6.12

Steps

git clone git@github.com:byCedric/expo-monorepo-example.git
cd expo-monorepo-example
pnpm i
cd apps/mobile
npx expo run:ios

Error

CleanShot 2023-12-13 at 10 11 36@2x

enisze commented 10 months ago

@8times4 did you find a solution? I got the same issue now.

eabz commented 10 months ago

Same issue here. Haven't found a solution.

IJustDev commented 10 months ago

Same issue here, didn't find a solution yet. I'm trying:

$ eas build -p ios --local
IJustDev commented 9 months ago

It looks like there has been changes to pnpm setups in react-native: 0.72.8

https://github.com/facebook/react-native/commit/e70166a3a8b9ddf1a7e322db602c548aaa60102d#diff-766bef9361966fae97e56d95c694309a9e446f6ce5e8ea837b7d09b509e6a5b7

IJustDev commented 9 months ago

Ok it looks like it worked by upgrading it to this. I think it's required that all of your react-native versions that are installed in every package has to be updated to 0.72.8.

I removed all node_modules folders and the package-lock.json files and ran npm install and after that pod install worked like expected.

My setup:

To check what versions are installed:

enisze commented 9 months ago

I had the issue that my react-native-reanimaed package was not in the same folder as my react-native package. I solved it by adding it to the correspondig package.json.

nkalinov commented 9 months ago

Provoqued by the previous comment, I was also not having react-native-codegen in the same folder as react-native. Using Yarn Berry and a monorepo, the fix for me was to add:

  "installConfig": {
    "hoistingLimits": "workspaces"
  }

to package.json of the workspace that uses expo/react-native.

byCedric commented 5 months ago

Hi all! Sorry for the extremely long delay! Next time, please do ping me on Twitter [@cedric_dev][https://x.com/cedric_dev].

This was indeed an issue with React Native. I just upgraded the monorepo to use Expo SDK 51 / React Native 0.74.1, meaning that you shouldn't run into this issue anymore.

The yarn/npm workarounds are super helpful, thanks for mentioning them!

Hope this helps!