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 ?
Answer to this question is well documented in expo documentation<blockquote> <h2>Expo & "Create React Native App"</h2>
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:<ul><li>Publish your project to a permanent URL, eg:
https://expo.io/@community/reactconf2017.See Publishing on Expo for more information. </li> <li>Build binaries for app / play store distribution. To do this with CRNA without using Expo, you would need to run eject.</li> </ul></blockquote>
create-react-native-app was replaced by expo-cli.
there are some advantages and disadvantages for each
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
Setting up a project is easy and can be done in minutes
Expo can build .apk and .ipa files
do not need simulator or etc for running your app
You can't add native modules.
your finalize app is more bigger than react native app init
i advice to you read this https://docs.expo.io/versions/latest/introduction/why-not-expo