Brent Vatne的答案很好,但我想补充一些细节 .
Expo扩展了React Native的API表面
React Native没有提供开箱即用的所有JS API,只提供了大多数原始功能 . React Native开发人员应该使用Android Studio / XCode链接其他本机库 . Expo旨在增强RN并提供您最常见需求所需的所有JS API . 它基本上是一组定义良好的原始库,已经为您打包在一个库中:ExpoKit . 有时这些库实际上已经存在于RN世界中,并集成到ExpoKit中 .
同样重要的是要注意到世博团队不能将每个lib都包含在ExpoKit中(这可能会造成一些挫败感),因为hello world app的大小会增加,因为它会发送大量不会被使用的API在大多数应用程序
Expo提供无线JS更新
与其他系统(CodePush ...)一样,Expo提供了一个通过无线方式更新您的应用程序的系统 . 这意味着您在CDN上传JS包,移动应用程序将在下次启动时自动下载并使用新的JS(无需从商店请求发布/审核) .
Expo提供了一个CLI工具来上传/管理其CDN上的JS包 . 对于开发,您还可以选择成为CDN并在localhost上托管JS包 . 而XDE只是CLI上的可视化包装器 .
Expo提供通用客户端
Expo客户端是一个通用客户端,允许加载任何与Expo兼容的应用程序 . 所有的Expo应用程序都可以完全相同本机运行时(RN ExpoKit),唯一的区别是我们给它们的JS . 您发布到应用商店的Expo应用会将您的JS捆绑网址硬编码 . Expo客户端以特定方式构建,以便您可以通过扫描QRCode或提供URL来选择加载JS的URL .
请注意,此客户端还可以从localhost加载JS包,并使您的开发体验更轻松:不需要XCode或Android Studio,并且可以更快地在手机上运行您的第一个Hello World(从几小时到几分钟) . 你可以在没有Mac的情况下在iPhone上进行开发,设置需要2分钟 .
实际上,由于Expo SDK可以升级,Expo客户端包含一个兼容层,因此它可以运行最后5个SDK版本 .
Expo提供构建服务
由于所有Expo应用程序共享相同的本机代码,Expo可以轻松地为您构建这些应用程序 . 他们创建了一个 Cloud 构建服务 .
The major thing that differenciate 2 apps built by Expo is just the hardcoded url to which the app is supposed to download the JS bundle to run.
Expo为您做了一些其他的事情,比如提供一种声明性的方式来设置应用程序图标,方向,权限,API密钥,帮助您设置推送通知,配置配置文件......许多设置必须在应用程序的构建时进行硬编码,并且可以不能在空中改变 .
Expo将React Native变为Phonegap对Cordova的影响
React Native与Cordova类似 . 它不是相同的视图技术(native vs webview),但它们都允许你从javascript控制本机功能,并且都提供了一个插件系统,以便开发人员可以轻松添加新的JS /本机绑定 .
PhoneGap与Expo类似 . 他们都尝试使用一组预定义的其他本机插件来丰富它们构建的底层平台的原始API . PhoneGap还提供build service,并且只要您使用已批准的插件,就可以使用generic client .
结论
如你所见,世博会是一套工具 . 最后,它允许轻松开发,共享和发布您的移动项目的商店 . 它与PhoneGap体验非常相似(但更好,更少混淆) .
我将明确推荐任何新的React Native绿地项目的Expo,除了以下两种情况:
您已经知道您需要API 's that are not available in Expo and won' t
你非常关心你的应用程序大小(因为大尺寸的ExpoKit,HelloWorld大于25mb,但之后它并没有增加太多,因为它只是JS)