info Fetching system and libraries information...
System:
OS: macOS 10.14.5
CPU: (4) x64 Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz
Memory: 4.87 GB / 20.00 GB
Shell: 5.3 - /bin/zsh
Binaries:
Node: 12.4.0 - ~/.nvm/versions/node/v12.4.0/bin/node
Yarn: 1.16.0 - ~/.nvm/versions/node/v12.4.0/bin/yarn
npm: 6.9.0 - ~/.nvm/versions/node/v12.4.0/bin/npm
SDKs:
iOS SDK:
Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
Android SDK:
API Levels: 27, 28, 29
Build Tools: 27.0.3, 28.0.3, 29.0.0
System Images: android-27 | Intel x86 Atom_64, android-28 | Intel x86 Atom_64, android-29 | Intel x86 Atom_64
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5522156
Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild
npmPackages:
react: 16.8.6 => 16.8.6
react-native: 0.60.0 => 0.60.0
I have a project use monorepo with yarn workspace feature.
it's fail when I cd ios && pod install.
Detected React Native module pods for RNRippleView, react-native-video, and react-native-webview
Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`
Fetching podspec for `RNRippleView` from `../`
[!] No podspec found for `RNRippleView` in `../`
then I run react-native config
Details
{
"root": "/Users/flyboy/.dee/yozman/yoboto-app",
"reactNativePath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native",
"dependencies": {
"react-native-touchable-ripple": {
"root": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple",
"name": "react-native-touchable-ripple",
"platforms": {
"ios": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple",
"pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios/RNRippleView.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/RNRippleView.podspec",
"projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios/RNRippleView.xcodeproj",
"projectName": "RNRippleView.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": []
},
"android": null
},
"assets": [],
"hooks": {},
"params": []
},
"react-native-video": {
"root": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
"name": "react-native-video",
"platforms": {
"ios": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
"pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios/RCTVideo.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/react-native-video.podspec",
"projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios/RCTVideo.xcodeproj",
"projectName": "RCTVideo.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": []
},
"android": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/android-exoplayer",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
"packageImportPath": "import com.brentvatne.react.ReactVideoPackage;",
"packageInstance": "new ReactVideoPackage()"
}
},
"assets": [],
"hooks": {},
"params": []
},
"react-native-webview": {
"root": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
"name": "react-native-webview",
"platforms": {
"ios": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
"pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios/RNCWebView.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/react-native-webview.podspec",
"projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios/RNCWebView.xcodeproj",
"projectName": "RNCWebView.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": []
},
"android": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/android",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
"packageImportPath": "import com.reactnativecommunity.webview.RNCWebViewPackage;",
"packageInstance": "new RNCWebViewPackage()"
}
},
"assets": [],
"hooks": {},
"params": []
}
},
"commands": [
{
"name": "log-ios",
"description": "starts iOS device syslog tail"
},
{
"name": "run-ios",
"description": "builds your app and starts it on iOS simulator",
"examples": [
{
"desc": "Run on a different simulator, e.g. iPhone 5",
"cmd": "react-native run-ios --simulator \"iPhone 5\""
},
{
"desc": "Pass a non-standard location of iOS directory",
"cmd": "react-native run-ios --project-path \"./app/ios\""
},
{
"desc": "Run on a connected device, e.g. Max's iPhone",
"cmd": "react-native run-ios --device \"Max's iPhone\""
},
{
"desc": "Run on the AppleTV simulator",
"cmd": "react-native run-ios --simulator \"Apple TV\" --scheme \"helloworld-tvOS\""
}
],
"options": [
{
"name": "--simulator [string]",
"description": "Explicitly set simulator to use. Optionally include iOS version betweenparenthesis at the end to match an exact version: \"iPhone 6 (10.0)\"",
"default": "iPhone X"
},
{
"name": "--configuration [string]",
"description": "Explicitly set the scheme configuration to use",
"default": "Debug"
},
{
"name": "--scheme [string]",
"description": "Explicitly set Xcode scheme to use"
},
{
"name": "--project-path [string]",
"description": "Path relative to project root where the Xcode project (.xcodeproj) lives.",
"default": "ios"
},
{
"name": "--device [string]",
"description": "Explicitly set device to use by name. The value is not required if you have a single device connected."
},
{
"name": "--udid [string]",
"description": "Explicitly set device to use by udid"
},
{
"name": "--no-packager",
"description": "Do not launch packager while building"
},
{
"name": "--verbose",
"description": "Do not use xcpretty even if installed"
},
{
"name": "--port [number]",
"default": 8081
},
{
"name": "--terminal [string]",
"description": "Launches the Metro Bundler in a new window using the specified terminal path."
}
]
},
{
"name": "log-android",
"description": "starts logkitty"
},
{
"name": "run-android",
"description": "builds your app and starts it on a connected Android emulator or device",
"options": [
{
"name": "--root [string]",
"description": "Override the root directory for the android build (which contains the android directory)",
"default": ""
},
{
"name": "--variant [string]",
"description": "Specify your app's build variant",
"default": "debug"
},
{
"name": "--appFolder [string]",
"description": "Specify a different application folder name for the android source. If not, we assume is \"app\"",
"default": "app"
},
{
"name": "--appId [string]",
"description": "Specify an applicationId to launch after build.",
"default": ""
},
{
"name": "--appIdSuffix [string]",
"description": "Specify an applicationIdSuffix to launch after build.",
"default": ""
},
{
"name": "--main-activity [string]",
"description": "Name of the activity to start",
"default": "MainActivity"
},
{
"name": "--deviceId [string]",
"description": "builds your app and starts it on a specific device/simulator with the given device id (listed by running \"adb devices\" on the command line)."
},
{
"name": "--no-packager",
"description": "Do not launch packager while building"
},
{
"name": "--port [number]",
"default": 8081
},
{
"name": "--terminal [string]",
"description": "Launches the Metro Bundler in a new window using the specified terminal path."
},
{
"name": "--tasks [list]",
"description": "Run custom Gradle tasks. By default it's \"installDebug\""
},
{
"name": "--no-jetifier",
"description": "Do not run \"jetifier\" – the AndroidX transition tool. By default it runs before Gradle to ease working with libraries that don't support AndroidX yet. See more at: https://www.npmjs.com/package/jetifier.",
"default": false
}
]
}
],
"assets": [],
"platforms": {
"ios": {},
"android": {}
},
"haste": {
"providesModuleNodeModules": [
"react-native"
],
"platforms": [
"ios",
"android"
]
},
"project": {
"ios": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/ios",
"folder": "/Users/flyboy/.dee/yozman/yoboto-app",
"pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/ios/yoboto.xcodeproj/project.pbxproj",
"podfile": "/Users/flyboy/.dee/yozman/yoboto-app/ios/Podfile",
"podspecPath": null,
"projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/ios/yoboto.xcodeproj",
"projectName": "yoboto.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": []
},
"android": {
"sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/android/app",
"isFlat": false,
"folder": "/Users/flyboy/.dee/yozman/yoboto-app",
"stringsPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/res/values/strings.xml",
"manifestPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/AndroidManifest.xml",
"buildGradlePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/build.gradle",
"settingsGradlePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/settings.gradle",
"assetsPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/assets",
"mainFilePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/java/com/yoboto/MainApplication.java",
"packageName": "com.yoboto"
}
}
}
I guess this comes with this commit https://github.com/react-native-community/cli/commit/c9aec255627c80dc6bab853ad9433ef7e864cde9
https://github.com/react-native-community/cli/blob/c9aec255627c80dc6bab853ad9433ef7e864cde9/packages/platform-ios/native_modules.rb#L45-L49
for podspec RNRippleView at #L46 absolute_podspec_path is /Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/RNRippleView.podspec.
it's already relative_path and doesn't contain character node_modules.
so relative_podspec_path at #L47 will be not correct.
Did you adjust the root? https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#custom-root-monorepos
@thymikee
I didn't do anything.
my project structure is like this
root/
node_modules/
react-native/
react-native-touchable-ripple/ # this is the link forlder by yarn
ios/
RNRippleView.xcodeproj
RNRippleView.podspec
...
packages/
react-native-touchable-ripple/
ios/
RNRippleView.xcodeproj
RNRippleView.podspec
it work well with
"@react-native-community/cli-platform-ios": "2.1.1",
@yozman oh, that's good to know. Would you like to give it a shot and fix it? :)
cc @maciejsimka
I'm experiencing this issue as well. @yozman What is the temporary fix you are using?
@sm1th you can use Yarn resolutions: https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ and pin "@react-native-community/cli-platform-ios": "2.1.1"
@thymikee TIL, thanks!
@thymikee
I tried with my pool ruby programing knowledge,
this is pr https://github.com/react-native-community/cli/pull/547
wish ur code review and merge
Is this fix included in react-native 0.60.4?
@sm1th it's in the range, here's how to update the @react-native-community/cli to the latest version (it's a direct dependency of React Native).
I followed the upgrade instructions but I'm still having trouble linking a monorepo.
-> yarn list --pattern @react-native-community/cli
yarn list v1.17.3
├─ @react-native-community/[email protected]
├─ @react-native-community/[email protected]
├─ @react-native-community/[email protected]
└─ @react-native-community/[email protected]
react-native.config.js:
module.exports = {
dependencies: {
'my-package': {
root: '/Users/joshua/Projects/myProject/myPackageDir',
},
},
};
-> cd ios && pod install
Detected React Native module pods for RNGestureHandler and my-package
Analyzing dependencies
Fetching podspec for `RNGestureHandler` from `../node_modules/react-native-gesture-handler`
...
Fetching podspec for `my-package` from `../Users/joshua/Projects/myProject/myPackageDir`
[!] No podspec found for `my-package` in `../Users/joshua/Projects/myProject/myPackageDir`
Are you able to prepare a repro we could download and test?
Sure, please see my branch here.
cd exampleyarn installreact-native.config.js to the correct path.cd iospod installI figured out why this structure breaks the native_modules script:
If I have
project_root = "/Users/joshua/Projects/react-native-msal-plugin/example"
and
podspec_path = "/Users/joshua/Projects/react-native-msal-plugin/msalPlugin/react-native-msal-plugin.podspec"
then line 59 will return
relative_path = "/Users/joshua/Projects/react-native-msal-plugin/msalPlugin"
since the split does nothing. So in the next statement, line 61,
File.join(root, relative_path)
becomes
"../Users/joshua/Projects/react-native-msal-plugin/msalPlugin"
and of course there's no podspec file there.
Also having this issue with Android: running the react-native run-android command inside the monorepo package containing the RN app gives the following error: Cannot get property 'packageName' on null object. Apparently the getReactNativeRoot method in the @react-native-community/cli-platform-android/native_modules.gradle file resolves to the root of the monorepo, and not the actual package containing the RN app. It then proceeds to run the react-native config command in the monorepo root, which produces a result that looks like this: (Note the empty object returned for the project key)
{
"root": "/Users/korede/Overt/Move",
"reactNativePath": "/Users/korede/Overt/Move/node_modules/react-native",
"dependencies": {},
"commands": [],
"assets": [],
"platforms": {},
"haste": {
"providesModuleNodeModules": [],
"platforms": []
},
"project": {}
}
For context, running the same command in the folder containing the app produces this:
...,
"project": {
"ios": {
"sourceDir": "/Users/korede/Overt/Move/packages/client/ios",
"folder": "/Users/korede/Overt/Move/packages/client",
"pbxprojPath": "/Users/korede/Overt/Move/packages/client/ios/Move.xcodeproj/project.pbxproj",
"podfile": "/Users/korede/Overt/Move/packages/client/ios/Podfile",
"podspecPath": null,
"projectPath": "/Users/korede/Overt/Move/packages/client/ios/Move.xcodeproj",
"projectName": "Move.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": []
},
"android": {
"sourceDir": "/Users/korede/Overt/Move/packages/client/android/app",
"isFlat": false,
"folder": "/Users/korede/Overt/Move/packages/client",
"stringsPath": "/Users/korede/Overt/Move/packages/client/android/app/src/main/res/values/strings.xml",
"manifestPath": "/Users/korede/Overt/Move/packages/client/android/app/src/main/AndroidManifest.xml",
"buildGradlePath": "/Users/korede/Overt/Move/packages/client/android/app/build.gradle",
"settingsGradlePath": "/Users/korede/Overt/Move/packages/client/android/settings.gradle",
"assetsPath": "/Users/korede/Overt/Move/packages/client/android/app/src/main/assets",
"mainFilePath": "/Users/korede/Overt/Move/packages/client/android/app/src/main/java/com/move/MainApplication.java",
"packageName": "com.move"
}
}
I'm inclined to think this might be an issue with the getReactNativeRoot method not returning the correct path. Please let me know if there's anything I'm missing. If it's a bug, I'd love to help with a PR to fix it.
@koredefashokun can you try the latest cli?
Here's how to update the @react-native-community/cli to the latest version.
@thymikee Just confirmed that the latest CLI gives the same error. Was able to get the stacktrace by running the command directly. I can share that if it would be useful as well.
not sure if this is related or not
but react-native is showing the following warning in a monorepo
Loading dependency graph...warn The following packages use deprecated "rnpm" config that will stop working from next release:
- @entria/core: https://npmjs.com/package/@entria/core
it looks like it is trying to autolinking a package in a yarn workspaces
we have like this:
packages
I've created a react-native.config.js like this:
```jsx
module.exports = {
project: {
ios: {},
android: {},
},
assets: [],
};
````
to avoid this warning
I also get an issue with use_native_modules! when I use it as:
platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
target 'annoread' do
# Pods for annoread
pod 'React', :path => '../node_modules/react-native/'
pod 'React-Core', :path => '../node_modules/react-native/React'
pod 'React-DevSupport', :path => '../node_modules/react-native/React'
pod 'React-fishhook', :path => '../node_modules/react-native/Libraries/fishhook'
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
target 'annoreadTests' do
inherit! :search_paths
# Pods for testing
end
use_native_modules!
end
target 'annoread-tvOS' do
# Pods for annoread-tvOS
target 'annoread-tvOSTests' do
inherit! :search_paths
# Pods for testing
end
end
use_native_modules!("../../..")
Adjusting the paths like in this Podfile:
platform :ios, '9.0'
require_relative '../../../node_modules/@react-native-community/cli-platform-ios/native_modules'
target 'annoread' do
# Pods for annoread
pod 'React', :path => '../../../node_modules/react-native/'
pod 'React-Core', :path => '../../../node_modules/react-native/React'
pod 'React-DevSupport', :path => '../../../node_modules/react-native/React'
pod 'React-fishhook', :path => '../../../node_modules/react-native/Libraries/fishhook'
pod 'React-RCTActionSheet', :path => '../../../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../../../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../../../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../../../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../../../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../../../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../../../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../../../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../../../node_modules/react-native/Libraries/Vibration'
pod 'React-RCTWebSocket', :path => '../../../node_modules/react-native/Libraries/WebSocket'
pod 'React-cxxreact', :path => '../../../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../../../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../../../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../../../node_modules/react-native/ReactCommon/jsinspector'
pod 'yoga', :path => '../../../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../../../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../../../node_modules/react-native/third-party-podspecs/Folly.podspec'
target 'annoreadTests' do
inherit! :search_paths
# Pods for testing
end
use_native_modules!
end
target 'annoread-tvOS' do
# Pods for annoread-tvOS
target 'annoread-tvOSTests' do
inherit! :search_paths
# Pods for testing
end
end
Running pod install works.
You're expected to use use_native_modules! inside the target because it defines pods.
You're expected to use
use_native_modules!inside the target because it definespods.
Please add that to the documentation, I went on that page 10 times. I tried it more than 5 times.
Also, every pod dependency has to be updated in order for it to work, which is not specified. I am not familiar with Cocoa Pods.
Now you have this knowledge! Can you share it in the form of a PR to the docs? :)
Now you have this knowledge! Can you share it in the form of a PR to the docs? :)
Yes. :)
Now you have this knowledge! Can you share it in the form of a PR to the docs? :)
Done.
https://github.com/react-native-community/cli/pull/590
@thymikee @koredefashokun
I am facing autolink issue in android with monorepo.
ReactNative version: 0.60.4
cli version: 2.8.0
If we run "yarn workspace mobile react-native config" in the root, The output is ok and the project details are filled. If we run "react-native config" in root then the project details are not filled.
When we execute "yarn workspace mobile react-native run-android" I am getting the following error:
Cannot get property 'packageName' on null object
This is same as the problem reported by @koredefashokun . Can you please let me know how to resolve this issue.
What if you tell the CLI where the project is, resolving from the root?
// react-native.config.js
module.exports = {
project: {
android: {
sourceDir: './mobile/android',
},
},
};
See: https://github.com/react-native-community/cli/blob/master/docs/projects.md
@thymikee I tried setting sourceDir in react-native.config.js. But still the issue is same.
https://github.com/learnyst/monorepo.git. This is the minimal reproducible demo.
@thymikee please let me know if I need to try any other solution. thanks
Can confirm that this issue still persists @thymikee @learnyst. I've been able to make iOS work, but the error manifests when attempting to run on Android.
@thymikee any solutions?
Ok, I've found the issue (at least one of them). Our config resolution relies on package.json with dependencies defined there to be present in the project root. Obviously, this is not working in monorepo setup. So what you can do now to unblock yourselves:
react-native.config.js, module.exports = {
project: {
android: {
sourceDir: './packages/mobile/android',
},
},
};
--- a/package.json
+++ b/package.json
@@ -6,5 +6,9 @@
"packages/*"
],
"nohoist": []
+ },
+ "dependencies": {
+ "react-native": "*",
+ "@react-native-community/netinfo": "*"
}
While on it, how do you usually expect the packages in a monorepo to work? Is it running from the root, or from the package folder? Or maybe both, depending on the use case?
@thymikee I usually expect running commands in the packages to work from the package folder, but also in the root, via scripts added in the package folder's package.json file.
Having to manually create a react-native.config.js may not be helpful in some cases (e.g. When the user has multiple packages that are React Native projects).
Yea, that's understandable. We'll work on making easier to integrate.
When I pod install, the dependencies modules detect only works without using use_native_modules!("../../../) <- which points to the root project.
I came across this today on iOS for local packages in a monorepo, this is how I got around it, not sure if it works for everyone elses cases but let me know as I can send a PR: https://github.com/react-native-community/cli/pull/550#issuecomment-518400626
As a side note as well, the change in that PR should probably be using File.expand_path (same behaviour as path.resolve in nodejs) instead of File.join so maybe to do with that - not had a chance yet to debug further sorry.
@Salakar we explicitly avoid resolving full path, because it's saved in a Podfile.lock, which is typically saved to git and e.g. read by the CI or other team members.
@thymikee ah that makes sense. Not sure it can be avoided with symlinks though as they resolve to the full path as far as I can tell, which is what's causing the issue I think
@Salakar would you mind checking if this would work in your case?
I'm trying to upgrade from react-native 0.59 to 0.61 and having the exact same issue on android: Cannot get property 'packageName' on null object. iOS is working as expected.
Note: by “upgrading” I mean I created a new project from scratch and copy pasted the new files into the monorepo project
Although this comment does seem to fix this specific issue, it installs the react-native app inside packages/mobile/node_modules instead of the root node_modules, which is something I want to avoid because I've had problems with this in the past (and it doesn’t fix all issues, just this new)
Any other solution available/coming to this repo?
CLI version is v3 alpha 2.
I have the same issue @brunolemos. I would appreciate any solution that does not involve me to install react-native in the specific folder, instead of in the root of the monorepo. This is arguably a better approach, especially since users may have more than one package dependent on react-native. Not sure if this is considered a priority in this repo. Would appreciate if anyone could point me in the right direction to submit a pull request to fix this.
@Esemesek would you find some time to dig it? I'm pretty swamped for the next few weeks, so can't commit to that unfortunately
Should we open a new issue? If not, please reopen this one.
Let's open a new one please, this issue tries to handle too many cases and platforms.
I am going to look into this right now and resolve some of the confusion around monorepo setup. Unfortunately, none of the workarounds seem to be working 100% correct.
@Salakar would you mind checking if this would work in your case?
Sorry for the late response. Can confirm everything is now working. Auto-linking in a monorepo is working well for https://github.com/invertase/react-native-firebase - though admittedly it's not using a custom root or anything which I think is the case on some of the other issues here.
Most helpful comment
Also having this issue with Android: running the
react-native run-androidcommand inside the monorepo package containing the RN app gives the following error:Cannot get property 'packageName' on null object. Apparently thegetReactNativeRootmethod in the@react-native-community/cli-platform-android/native_modules.gradlefile resolves to the root of the monorepo, and not the actual package containing the RN app. It then proceeds to run thereact-native configcommand in the monorepo root, which produces a result that looks like this: (Note the empty object returned for theprojectkey)For context, running the same command in the folder containing the app produces this:
I'm inclined to think this might be an issue with the
getReactNativeRootmethod not returning the correct path. Please let me know if there's anything I'm missing. If it's a bug, I'd love to help with a PR to fix it.