differences between create-react-native-app and exp init - react-native

I found that create-react-native-app is based on expo. but when using exp-cli, it is also based on Expo.
what are differences between create-react-native-app and exp init ?

Updated answer:
create-react-native-app was replaced by expo-cli.
https://docs.expo.io/workflow/glossary-of-terms/#create-react-native-app

Answer to this question is well documented in expo documentation
Expo & "Create React Native App"
Create React Native App lets you build a React Native app without any
build configuration. This may sound familiar to you because Expo does
this as well -- when you create a project with XDE or exp you don't
have to deal with Xcode or Android Studio configuration files, it just
works. This guide is intended to outline some of the key differences
between Expo and CRNA (create-react-native-app).
CRNA does not require you to have an Expo account
You can run create-react-native-app YourAppName and off you go. So what does not
having an account mean, and what would signing up and using XDE/exp
get you -- why do we require it with Expo? Having an Expo account
allows you to do the following:
Publish your project to a permanent URL, eg:https://expo.io/#community/reactconf2017.See Publishing on Expo for more information.
Build binaries for app / play store distribution. To do this with CRNA without using Expo,
you would need to run eject.

There are advantages and disadvantages to either:
React Native app advantage:
You can add native modules written in Java/Objective-C
React Native app disadvantage:
Needs Android Studio and XCode to run the projects
Expo advantages:
Setting up a project is easy and can be done in minutes
Expo can build .apk and .ipa files
You do not need simulator to run your app.
Expo disadvantages:
You can't add native modules.
Your final app will bigger with expo init than with react native app init.
I suggest you read this:
https://docs.expo.io/versions/latest/introduction/why-not-expo

Related

Can I use Expo to run a react-native project created by RN CLI?

I was wondering if I could use Expo to run the react-native project that I created using the npx react-native init command, since it generates a better structure for real-world applications.
The reason I want to do this is to avoid the countless erros that I had while running and debugging the app.
You can't do that..
React native and expo are different.
You can run expo projects on react native by detaching them. Expo has limitations.
You can not run react native projects on expo, i.e projects made by react native init/npx can't run on expo
You can use a package made available by the expo
react-native-unimodules
for any React Native project using some resources made available by the expo.
react-native-unimodules

Ejected expo react native app requires expo?

I created a RN with create-react-native-app, and I have now decided to eject. It didn't work initially, and required some packages to be installed (#babel/...), but now, it complains that Module 'expo' does not exist in the Haste module map.
Why does it still require expo, now that it has been ejected? Or have I misunderstood what ejection does?
N.B. during the ejection I chose the option to eject to an RN app, not to ExpoKit. This is on iOS, currently.
When ejecting expo app you'll be asked about using expo-kit or just react-native and it's up to you to choose, plus Module 'expo' does not exist in the Haste module map means you still using expo in your code so double check your code to be sure that you're not importing expo anywhere and try again.
TL;DR
Ejected expo react native app requires expo? the short answer is no.
when using expo app you have the ability to build your app using the expo server so you don't have to have Android Studio or XCode installed all you have to do is $ expo build:[android|ios] and download your built package after the build process is done also you can run your app using expo client app on Android and Ios but once ejecting you'll lose the ability of using expo server as your build environment instead you have to use Android Studio or XCode, but the main difference here is when you choose expo-kit you still have the ability of using expo client to run your app and you still have the ability to use expo modules inside your code but when you choose react-native you can't use expo client instead you have to use the native tools, anyway in all cases once you eject your project you have to build it yourself and you can't undo this step.
Sidenote
You can build very powerful apps using only JavaScript without any need to eject especially when using `expo SDK 31+, I'm working on an app now with features like detecting location, live maps, social login and chat and I don't need to eject it at all.
Please take a look here and here
Update:
One last thing you have to remember is that when using expo or expo-kit you can keep developing ios app on any OS but when using react-native you can't do this you MUST have a mac.

How to transfer EXPO project to React Native project?

I build an app with Expo tool .. but now I what to move to react native without expo .. I tried to just create a new project in react native and then transfer the code that I had written and install components that I had used in my app .
the app with Expo work as expected put with moved to react native without Expo works as unexpected and crashes.
you don't need to transfer the code like that, the expo provides us to detach our code from expo to without expo react-native projects.
please refer to this link expokit eject
if you want to use expo API in your project then you can detach your app using detach-with-expokit.
use expo eject to add ExpoKit (choose the "ExpoKit" option).

Upgrading a project from react-native to create-react-native-app?

I'm trying to use create-react-native-app as per the documentation with an example project that was built using instructions for react-native.
In terms of translating from one to the other what are the steps involved?
Edit: So i can run the app using npm start, with the expo.io QR code appearing as an option etc?
Create-react-native-app create a new project with Expo, you can eject it to turn it into a react-native project (android/ios folders with native code + src folder with javascript code).
You'll need an Xcode/Android Studio environment to run a react-native app built without Expo.
You can't use Expo to run a React-Native app with custom native code.
Related links : Ejecting from Create React Native App
What is the difference between Expo and React Native?

How to use expo kit in react native init?

I have used create react native app tool to create initial setup of the my app. With CRNA i used Expokit also. After ejecting CRNA into react-native init setup i couldn't use expo camera features. I'm getting below error while launching app in simulator ("undefined is not an object(evaluating 'ExponentConstants.linkingUri)"). How resolve and use expokit after the eject the application?
Now you can use react-native-unimodules
If you create a React Native project through react-native init or with
another tool like ignite-cli, then you’ll need to add the
react-native-unimodules package to your project and configure it
first: follow the instructions in the README.
See detail at expo blog.
After you eject from create-react-native-app you need to use Git or another version control tool to go back. You can create a new project with create-react-native-app, copy over your JS code, make sure it works, and then eject and this time choose the ExpoKit choice.
It's not possible yet, according with this answer in the Expo Forumn: https://forums.expo.io/t/react-native-init-expo-sdk/1903/2