Expo和React Native有什么区别?

时间:2016-08-26 16:16:08

标签: exponentjs expo

来自the Expo website

  

Expo让网络开发人员可以通过JavaScript编写一次,构建真正适用于iOS和Android的本机应用程序。

这不是React Native的作用吗?有什么区别?

9 个答案:

答案 0 :(得分:151)

我在世博会工作!

当您在Expo中编写代码时,您会编写React Native代码。 Expo有 两个主要部分:

1)expo-cli:用于创建项目,查看日志,在设备上打开,发布等的开发人员工具。

2)Expo客户端:手机上的一款可让您打开项目的应用 当你正在处理它们时,无需通过XCodeAndroid Studio,也可以让其他人查看它们!如果您通过expo-cli发布,则人们可以随时通过Android上的Expo客户端或iOS上的用户登录到与其发布的同一帐户进行访问。最后,我们还可以构建独立的应用程序,以便人们不必使用Expo客户端打开它,如果您愿意,可以分发到应用程序商店和游戏商店。

因此,Expo是一组建立在React Native之上/周围的工具。这些 工具依赖于我们在Expo处持有的一个关键信念:只要你有一套全面的API公开Javascript,就可以构建大多数应用而无需编写本机代码。

这很重要,因为使用React Native,您始终可以下载到本机代码。这有时非常有用,但它需要付出代价:如果你想要他们测试它们,你需要向人们发送你的二进制文件,世界另一端的人不能只是在你工作的时候点击链接打开它在它上面,您只需点击一下即可发布它,以便有人访问它,类似于您在浏览器中的操作方式。

使用Expo,我们建议尽量避免降低到本机代码。正如我上面提到的,我们认为,Javascript提供了一套全面的API,对于大多数应用来说,这不是必需的。因此,我们的目标是提供这套全面的API,然后构建可以在共享本机运行时的世界中存在的所有可怕工具。

但是,如果您必须发现绝对是原生的,那么您可以使用ExpoKit继续使用Expo提供给您的本机API,同时具有与您相同的控制级别任何原生项目。 “ExpoKit是一个Objective-C和Java库,允许您使用Expo平台和现有的Expo项目作为更大标准本机项目的一部分。” Read more here.

答案 1 :(得分:40)

我试图对世博会员工的文档和答案进行总结:

React Native init:

<强>优点

  • 您可以添加用Java / Objective-C编写的本机模块(可能是唯一但最强的)

<强>缺点

  • 需要Android Studio和XCode来运行项目
  • 如果没有mac
  • ,则无法为iOS开发
  • 设备必须通过USB连接才能用于测试
  • 字体需要在XCode中手动导入
  • 如果您想共享应用,则需要发送整个.apk / .ipa文件
  • 不提供开箱即用的JS API,例如:推送通知,资产管理器,它们需要手动安装并与npm链接,例如
  • 正确设置工作项目(包含设备配置)相当复杂,需要时间

<强>展

<强>优点

  • 设置项目很简单,可以在几分钟内完成
  • 您(以及其他人)可以在您处理项目时打开该项目
  • 分享应用程序很简单(通过QR码或链接),您不必发送整个.apk或.ipa文件
  • 无需构建运行应用程序
  • 在标准项目中集成一些基本库(推送通知,资产管理器......)
  • 您可以将其弹出到ExpoKit并使用某些Expo功能继续集成本机代码,但不是全部
  • Expo可以构建.apk和.ipa文件(可以通过Expo分发到商店)

<强>缺点

  • 您无法添加本机模块(可能是某些游戏转换器)
  • 您不能使用在Objective-C / Java
  • 中使用本机代码的库
  • 标准的Hello World应用程序大约25MB(因为集成了库)
  • 如果您想使用:FaceDetector,ARKit o付款需要将其弹出到ExpoKit
  • 将它弹出到ExpoKit可以权衡世博会的功能,例如:你无法通过二维码分享
  • 当弹出到ExpoKit时,您将受限于此时ExpoKit支持的本机版本
  • 在ExpoKit(使用原生模块)中进行调试要复杂得多,因为它混合了两种语言和不同的库(不再有官方的世博支持)。

我希望我能总结出最重要的一点。请随意添加其他积分。

来源:https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/issues/516#issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html(一般官方文件)

答案 2 :(得分:13)

官方博览会文件中对此进行了解释

What is the difference between Expo and React Native?

  

Expo有点像Ract for React Native。为您设置了很多东西,所以它可以更快地开始并走上正确的道路。

     

使用Expo,您不需要Xcode或Android Studio。您只需使用您熟悉的任何文本编辑器编写JavaScript(Atom,vim,emacs,Sublime,VS Code,无论您喜欢什么)。您可以在Mac,Windows和Linux上运行XDE(我们的桌面软件)。

     

以下是世博会开箱即用的一些内容:

     

支持iOS和Android

     

您可以直接在iOS和Android上使用在Expo中编写的应用程序。您不需要为每个过程单独构建一个过程。只需在iOS或Android(或计算机上的模拟器或模拟器)中从App Store打开Expo Client应用程序中的任何Expo应用程序。

     

推送通知

     

推送通知在iOS和Android上开箱即用,使用统一的API。您不必设置APNS和GCM / FCM或配置ZeroPush或类似的东西。我们认为我们已经让它变得如此简单。

     

Facebook登录

     

这可能需要很长时间才能自行设置,但您应该能够在10分钟或更短时间内在世博会上使用它。

     

即时更新

     

只需点击XDE中的发布,即可在几秒钟内更新所有Expo应用。你不必设置任何东西;它只是这样工作。如果您不使用Expo,则可以使用Microsoft Code Push或针对此问题推出自己的解决方案

     

资产管理

     

图像,视频,字体等都通过互联网动态分发。这意味着它们可以即时更新,并且可以即时更改。世博会内置的资产管理系统负责将您回购中的所有资产上传到CDN,以便他们能够快速加载给任何人。

     

没有世博会,正常的做法是将资产捆绑到您的应用中,这意味着您无法更改它们。或者你必须自己管理将你的资产放在CDN或类似的人身上。

     

更新到新的React Native版本

     

我们每隔几周就会发布一次新的世博会。如果您愿意,可以保留旧版本的React Native,或升级到新版本,而无需担心重建应用程序二进制文件。您可以担心在自己的时间升级JavaScript。

     

但没有原生模块......

     

世博会最受限制的是,如果不拆分和使用ExpoKit,就无法添加自己的原生模块。

答案 3 :(得分:11)

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可以轻松地为您构建这些应用程序。他们创建了一个云构建服务。

区分由Expo构建的2个应用程序的主要事情只是应用程序应该下载要运行的JS包的硬编码URL。

Expo会为您做一些其他事情,例如提供一种声明性的方式来设置应用程序图标,方向,权限,API密钥,帮助您设置推送通知,配置配置文件......许多设置必须在构建时硬编码应用程序,无法通过广播进行更改。

世博会对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,并且不会很快就会出现
  • 你非常关心你的应用程序大小(由于ExpoKit的大小,HelloWorld大于25mb,但之后它并没有增加太多,因为它只是JS)。

答案 4 :(得分:2)

EXPO CLI   优点:-      1.无需安装Android Studio和Xcode即可开始构建移动应用。      2.无需开发高配置机器。      3.移动ui可以使用条码扫描轻松地在设备android和iphone上检查。有时,您可以在在线iphone和android模拟器上进行检查。      4.快速发展。   缺点:-      1.本地依赖项无法添加到expo上,因为expo项目没有ios和android文件夹,因此expo受到限制。      2.使用Expo很难制作apk和ipa。 反应本地Cli

优点:-      1.轻松为android和ios添加本机依赖性,因为此项目结构具有ios和android文件夹。      2. Apk和ipa的构建很容易,而不是博览会。 注意”:-React Native CLI是在React Native框架上开始工作的正确方法。   缺点:-     1.需要高配置机器。     2.增加依赖性有时会比较困难但很好。     3.需要具备android文件夹结构和ios文件夹结构的基本知识,但是从中学到的东西会更多。

您可以根据需要选择任何方法。

答案 5 :(得分:2)

关于expo和react-native-cli的优缺点的答案是完整的。我想谈谈我的个人经历。在项目中,默认情况下,Expo包含许多模块,因此使用起来更加容易。但这在生产阶段存在很大的问题,因为内置的androidios版本的大小很大。例如,如果您的页面只有一个'Hello World',则apk的文件大小约为19 MB。在react-native-cli中具有相同的项目将导致应用程序的大小为6 MB

因此,就个人而言,如果您要开发商业应用程序,建议不要使用expo。

答案 6 :(得分:1)

我已经在博览会上工作了一年多 如果应用程序的大小对于您使用Expo来说并不重要,因为它易于实现地图,则推送比React-native容易,但是在项目结束时,如果要在Google Play或其他商店中发布应用程序,您将面临挑战在APK中删除一些权限 React-native您可以更改所有内容,但要导入某些库(例如推送通知或地图)也需要一些挑战,因为您必须手动将这些库添加到android和iOS项目中

答案 7 :(得分:0)

在这里我要指出,Expo使用的是较早版本的react 16.5,这将禁止您使用新的hooks功能。如果您决定使用Expo,请注意观看版本控制。如果您遇到奇怪的错误,则必须将旧版本的say-reaviation-navigation与16.5版本一起使用。

答案 8 :(得分:-1)

expo是围绕React Native构建的工具链,可帮助您快速启动应用程序。 它提供了一组工具,可简化通常在第三方本机React Native组件中可用的React Native应用,界面和服务的开发和测试。借助Expo,您可以在Expo SDK中找到所有它们。