Here’s my understanding of EAS Build, expo-dev-client, etc.
EAS Build is the new way to build apps using Expo’s build servers. (As opposed to
If you build with
expo build you get a predefined set of native code included in the app. This means that you cannot add new dependencies that include native code (like Razor Pay). Also, if there’s native code you don’t need (e.g. the face detector), you cannot remove this to make the app smaller.
With EAS Build you are able to add things like Razor Pay that depend on native code and when your app is built it will contain only the dependencies listed in your
package.json. So if you don’t have something listed in your dependencies then the native code will not be included in your app. This makes apps built with EAS Build smaller and also removes potentially problematic SDKs like Facebook Ads etc.
However, if you install Razor Pay, then the native code that it needs is not included in Expo Go, so your app will crash if you try to run it on Expo Go. So the Expo team made
expo-dev-client as basically a customized Expo Go app that includes only the dependencies from your
package.json, which also includes extra native code (like Razor Pay).
There are some things that might be a bit tricky, though. e.g. OTA updates are more complicated because the native code is no longer fixed for every app using the same Expo SDK version, so you need to be careful when deploying OTA updates. See the Updates docs for details.
Also, some native dependencies need you to do stuff like edit
build.gradle etc. In order to do this without ejecting you need a Config Plugin. Since this is all pretty new, random React Native libraries do not have Config Plugins etc. The Expo team has written some (see their expo/config-plugins repository), but ideally the library authors would include config plugins in the library itself. Some already do (e.g. react-native-nfc-manager, react-native-vision-camera).
I hope that helps your understanding