React-native: fix packager start for XCode

Created on 8 Feb 2019  路  9Comments  路  Source: facebook/react-native

Running App from _XCode didn't work_ anymore. All paths which bable resolver plugin use are broken.
Running App from CLI with react-native start ios --reset-cache works.

Reason: packager.js will be started from wrong path.
Detail-Description & Solution

Environment

React Native Environment Info:
System:
OS: macOS 10.14.2
CPU: (4) x64 Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz
Memory: 62.86 MB / 6.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 11.6.0 - /usr/local/bin/node
Yarn: 1.13.0 - /usr/local/bin/yarn
npm: 6.5.0 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 12.1, macOS 10.14, tvOS 12.1, watchOS 5.1
IDEs:
Xcode: 10.1/10B61 - /usr/bin/xcodebuild
npmPackages:
react: 16.6.3 => 16.6.3
react-native: ^0.58.4 => 0.58.4
npmGlobalPackages:
react-native-cli: 2.0.1

Thanks to @emusgrave for figuring this out.

Bug Mid-Pri iOS Locked Xcode 馃摝Bundler

Most helpful comment

Will this be fixed in 0.59.0 ?

All 9 comments

It looks like you are using an older version of React Native. Please update to the latest release, v0.58 and verify if the issue still exists.

The "Resolution: Old Version" label will be removed automatically once you edit your original post with the results of running react-native info on a project using the latest release.

I've upgraded now, issue still exists.

This issue occurs since Metro v0.47.

It happens when the the start command of the local-cli is not executed in the projectRoot directory e.g when you let Xcode start the packager for you. In this case, the cwd will be ${projectRoot}/node_modules/react-native.

Some babel plugins such as babel-plugin-module-resolver or babel-plugin-import-graphql fail to resolve files because of it. They receive wrong filenames from Babel such as ${projectRoot}/node_modules/react-native/src/index.js instead of ${projectRoot}/src/index.js.

This issue doesn't occur if you start the packager yourself using node node_modules/react-native/local-cli/cli.js start from your projectRoot.

It comes from this line. This script change the working directory to ${projectRoot}/node_modules/react-native and start Metro from there. I think that it should cd into the projectRoot instead.

Will this be fixed in 0.59.0 ?

For anyone who'll pick it up, please check out https://github.com/facebook/react-native/issues/21480 - they might be connected.

Please see the workaround from @MatthieuLemoine. It seems like you have a custom setup and you need to start Metro in the right place.

@cpojer Worked like a charm on 0.56. All the time started RN from XCode.
Don't have upgraded XCode, but only RN to 0.58.4 ... after this, the issue appears.
No special custom setup or other changes are made for the project between working version (0.56) and non-working version (0.58)

Please re-open.

@cpojer This issue happens when you let Xcode (therefore RN build scripts) start the packager for you whatever your setup is.

The build script packager.sh should start Metro from $PROJET_DIR instead of $PROJECT_DIR/node_modules/react-native to fix this issue.

Got it. I'm gonna reopen this issue. Do you mind sending a Pull Request with the fix?

Was this page helpful?
0 / 5 - 0 ratings