Skip to content

Commit

Permalink
Allow changing the project path in react-native-xcode.sh (#23273)
Browse files Browse the repository at this point in the history
Summary:
When using react-native inside a monorepo with yarn workspaces the react-native installation can get hoisted and the assumption that the project is located in the folder where node_modules is is no longer true.

To handle this case I added an option to pass the path of the project root.

For example when using yarn workspace we can use something like this in the xcode scripts:

Assumes the following folder structure
/packages/myapp
/node_modules/react-native

```sh
export NODE_BINARY=node
export PROJECT_ROOT=$PWD/..
../../../node_modules/react-native/scripts/react-native-xcode.sh
```

It could be possible to change the default to `$PWD/..` since pwd is where the xcode project is located but then it would break if the native project structure is not the one we assume. To avoid the breaking change I decided to just keep the existing behaviour and allow changing the path with `PROJECT_ROOT`.

[ios] [added] - Allow changing the project path in react-native-xcode.sh
Pull Request resolved: #23273

Differential Revision: D13941793

Pulled By: cpojer

fbshipit-source-id: f394641b1c9d01f32bc4169097e39fc14df8191f
  • Loading branch information
janicduplessis authored and facebook-github-bot committed Feb 4, 2019
1 parent 9f72e6a commit 9ccde37
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions scripts/react-native-xcode.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@ esac

# Path to react-native folder inside node_modules
REACT_NATIVE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# The project should be located next to where react-native is installed
# in node_modules.
PROJECT_ROOT=${PROJECT_ROOT:-"$REACT_NATIVE_DIR/../.."}

# Xcode project file for React Native apps is located in ios/ subfolder
cd "${REACT_NATIVE_DIR}"/../..
cd $PROJECT_ROOT

# Define NVM_DIR and source the nvm.sh setup script
[ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"
Expand Down

3 comments on commit 9ccde37

@grabbou
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As per CLI discussion here, we can safely revert this commit and just default:

cd '$PWD/...'

@janicduplessis, can you help me understand why you didn't do that in the first place?

It could be possible to change the default to $PWD/.. since pwd is where the xcode project is located but then it would break if the native project structure is not the one we assume. To avoid the breaking change I decided to just keep the existing behaviour and allow changing the path with PROJECT_ROOT.

Today, the CLI doesn't really care where you call it. It will "assume" the root by traversing up the tree and stop at first package.json.

So, in case the structure is packages/mobile/some_weird_custom_structure/MyProject.xcodeproj and JS files are at packages/mobile/index.js, Metro & CLI will set that one as a root.

I just want to confirm that this is what you had in mind before moving further.

CC: @thymikee

@grabbou
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, PROJECT_ROOT is confusing here because CLI/Metro will resolve their own and not respect this one.

@janicduplessis
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good, I fine with this change.

Please sign in to comment.