Expo和React Native有什么区别?


Answers:


206

我在世博会工作!

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

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

2)Expo客户端:您手机上的一个应用程序,可让您在处理项目时打开项目,而无需经历XCodeAndroid Studio,还可以让其他人查看它们!而且,如果您通过进行发布expo-cliExpo则登录到与发布时使用的相同帐户的用户可以随时通过Android或iOS上的客户端访问它。最后,我们还可以构建独立的应用程序,从而使人们不必使用Expo客户端来打开它,并且您可以根据需要分发到应用程序商店和游戏商店。

因此,Expo是在/周围构建的一组工具React Native。这些工具取决于我们坚持的一个主要信念Expo:只要您拥有暴露于的全面的API集,就可以构建大多数应用程序而无需编写本机代码Javascript

这很重要,因为React Native您可以始终使用本机代码。有时候这很有帮助,但是却要付出一定的代价:如果您想让他人测试您的二进制文件,则需要将其发送给其他人,世界另一端的人不能在工作时点击链接即可打开它上它,您不能一键发布它,就像其他人在浏览器中一样,让其他人访问它。

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

但是,如果您必须绝对使用本机,则可以ExpoKit继续使用本机API,这些API Expo具有与任何本机项目一样的控制级别。“ ExpoKit是一个Objective-C和Java库,允许您将Expo平台和现有Expo项目用作更大的标准本机项目的一部分。” 在这里阅读更多。


4
“使用指数,您将无法使用本机代码”。很高兴知道您不必使用本机代码,但是如果需要的话,为什么指数会阻止您这样做呢?
奥托

3
我知道那还不清楚。因此Exponent客户端是完全开源的(github.com/exponentjs/exponent),这意味着您可以根据需要编写本机代码,但是实际上,您只是将Exponent库视为本来就是典型的React Native中本机模块的集合。应用程式。这很好,并且是我们开源项目的动力。就是说,如果您希望能够使用我们的工具(应用程序二进制生成器,应用程序/播放商店上的Exponent客户端来共享测试版本,内置的推送通知等),则无法编写本机代码。
brentvatne

在撰写本文时,Expo在集成有用的本机插件方面已经相当不错。但是,他们缺少用于IAP的MAJOR插件集成,没有它,您将无法从应用程序中赚钱!你问,如果我不能赚钱,制作一个应用程序有什么意义!
亚当

95

我尝试对来自Expo员工的文档和答案进行总结:

React Native初始化:

优点

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

缺点

  • 需要Android Studio和XCode来运行项目
  • 没有Mac,就无法为iOS开发
  • 必须通过USB连接设备才能使用它进行测试
  • 字体需要在XCode中手动导入
  • 如果要共享应用程序,则需要发送整个.apk / .ipa文件
  • 不提供现成的JS API,例如Push-Notifications,Asset Manager,它们需要手动安装并与npm链接
  • 正确设置工作项目(包括设备配置)相当复杂,可能会花费一些时间

世博会

优点

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

缺点

  • 您无法添加本机模块(某些情况下可能会改变游戏规则)
  • 您不能使用在Objective-C / Java中使用本机代码的库
  • 标准的Hello World应用程序约为25MB(由于集成了库)
  • 如果要使用:FaceDetector,ARKit或Payments,则需要将其弹出EXPOKit
  • 将其弹出ExpoKit需要权衡Expo的功能,例如您无法通过QR代码共享
  • 弹出ExpoKit时,您只能使用ExpoKit当时支持的react本机版本
  • 在ExpoKit(带有本地模块)中进行调试要复杂得多,因为它混合了两种语言和不同的库(不再提供官方的Expo支持)

我希望我可以总结最重要的观点。请随时添加其他积分。

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


1
使用expo的另一个主要缺点是应用程序的大小。iOS应用程序的最小大小为
〜25

3
这已经被提到是世博项目的缺点:“标准的Hello World应用程序大约有25MB大(由于集成了库)”
Benjamin Heinke

1
感谢@BenjaminHeinke清楚地了解了优点和缺点。我们已经决定采用expo来做出反应,从而使本机应用程序陷入困境。因此,我们无法与Appsee集成。没有解决方法吗?
CoolDocMan

1
不必将设备连接到USB进行测试,只需要通过USB进行第一次编译和安装即可。以后您可以使用Wi-Fi!如果您对本机进行了更改,则将需要重新编译。
rszalski '18

28

Brent Vatne的回答很好,但我想补充一些细节。


Expo扩展了React Native的API表面

React Native并没有为您提供所有需要的即开即用的JS API,而是只有大多数原始功能。React Native开发人员应使用Android Studio / XCode链接其他本地库。世博会旨在增强RN,并提供最常见需求所需的所有JS API。基本上,这是一组已定义好的质量本机库,已经为您打包在一个库中:ExpoKit。有时,这些库实际上已经存在于RN世界中,并已集成到ExpoKit中。

还需要注意的是,Expo团队不能将其中的每个库都包含在ExpoKit中(这可能会带来一些挫败感),因为世界应用程序的大小会增加,因为它将附带很多不会使用的API在大多数应用中

世博会提供无线JS更新

像其他系统(CodePush ...)一样,Expo提供了一个可以通过空中更新您的应用程序的系统。这意味着您将JS捆绑包上传到CDN上,并且移动应用将在下次启动时自动下载并使用新的JS(无需从商店请求发布/审阅)。

Expo提供了一个CLI工具,用于在CDN上上传/管理JS软件包。对于开发,您还可以选择成为CDN并在本地主机上托管JS捆绑包。XDE只是CLI上的可视包装。

世博会提供一般客户

Expo客户端是允许加载与Expo兼容的任何应用程序的通用客户端。所有的Expo应用程序都共享完全相同的本机运行时(RN + ExpoKit),唯一的区别是我们为其提供了JS。您发布到应用商店的Expo应用会在其中硬编码您的JS捆绑包网址。Expo客户端以特定的方式构建,因此您可以通过扫描QRCode或提供URL从哪个URL中选择加载JS。

请注意,该客户端还可以从本地主机加载JS捆绑软件,从而使您的开发体验更轻松:无需XCode或Android Studio,并且使第一个Hello World在手机上运行的速度大大加快(从几小时到几分钟)。实际上,您可以在没有Mac的iPhone上进行开发,设置过程需要2分钟。

实际上,由于可以升级Expo SDK,Expo客户端包括一个兼容性层,因此它可以运行最后5个SDK版本。

世博会提供搭建服务

由于所有Expo应用程序共享相同的本机代码,因此Expo可以轻松为您构建这些应用程序。他们创建了一个云构建服务。

Expo所构建的2个应用程序的主要区别仅在于应用程序应该下载JS捆绑包以运行的硬编码URL。

世博会为您做其他事情,例如提供一种声明性的方式来设置应用程序图标,方向,权限,API键,帮助您设置推送通知,设置配置文件...许多设置必须在构建时在应用程序中进行硬编码,并且不可改变。

世博会是对Native的回应,而Phonegap对Cordova的回应是

React Native与Cordova类似。它不是相同的视图技术(本机vs网络视图),但是两者都允许您从javascript控制本机功能,并且都提供了插件系统,以便开发人员可以轻松添加新的JS /本机绑定。

PhoneGap与Expo相似。他们都试图通过一组预定义的其他本机插件来丰富其所构建的基础平台的原始API。PhoneGap还提供构建服务,并具有通用客户端,只要您使用批准的插件,该客户端即可正常工作。

结论

如您所见,Expo是一组工具。最后,它允许轻松地开发,共享和发布您的移动项目到商店。它与PhoneGap的体验非常相似(但是好多了,减少了混乱)。

对于这两个新的React Native新建项目,我将明确推荐Expo,以下两种情况除外:

  • 您已经知道您需要Expo中不可用的API,并且不会在短期内发布
  • 您非常关心您的应用程序大小(由于ExpoKit的大小,HelloWorld大于25mb,但是之后它不会增加太多,因为它只是JS)

1
我正在尝试查找API不支持的Expo的列表。有人知道在哪里可以找到这个吗?
ronnyrr '18

@ronnyrr Expo不支持不是JS且未包含在原始RN和ExpoKit中的所有内容。世博不支持的功能是无限的,因为世博不支持的功能有限列表中的所有其他内容。您所要求的不存在。
Sebastien Lorber '18

2
@ronnyrr我想这就是您要寻找的东西:expo.canny.io它是功能需求列表,您可以按人气进行排序
Evan Bacon

26

在官方的Expo文档中对此进行了说明

Expo和React Native有什么区别?

Expo有点像React Native的Rails。为您准备了很多东西,因此可以更快地入门并走上正确的道路。

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

以下是Expo可以立即为您提供的一些功能:

支持iOS和Android

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

推送通知

使用单个统一的API,推送通知可在iOS和Android上直接使用。您不必设置APNS和GCM / FCM或配置ZeroPush或类似的东西。我们认为我们已经尽可能轻松地做到了这一点。

Facebook登入

这可能需要很长时间才能自行正确设置,但是您应该能够在10分钟或更短的时间内使它在Expo上运行。

即时更新

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

资产管理

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

没有Expo,通常要做的就是将您的资产捆绑到您的应用程序中,这意味着您无法更改它们。否则,您必须自己将资产放在CDN或类似产品上。

轻松更新到新的React Native版本

我们每隔几周发布一次新的Expo。如果愿意,您可以使用旧版本的React Native,也可以升级到新版本,而不必担心重建应用二进制文件。您可以担心自己升级JavaScript。

但是没有本机模块…

Expo的最大局限性在于,如果不分离和使用ExpoKit,就无法添加自己的本机模块。


2
我正在Windows 8中使用EXPO。如何生成QR码,以便直接在设备上运行我的应用程序。
Prasanna

1
我没有在Windows上尝试过,但我认为它在任何系统上都必须相似。QR代码会在Expo XDE控制台或exp start控制台命令输出中自动生成。
gumkins '17

1
$ prasanna有时您看不到QR码,因为您的手机和开发机器不在同一网络上。例如,如果您在家工作,请确保您的电话在家庭网络中。等等...
ccalvert

7

博览会CLI

优点:-

 1. No need to install Android studio and Xcode for start building mobile app.
 2. No requirement of high configuration machine for development.
 3. Mobile ui easily check on both devices android and iphone using barcode scanning.and some time you can check on online iphone and android simulators.
 4. fast development.

缺点:-

 1. Native dependency can not add on expo because expo project don't have ios and android folder so here expo is bounded.
 2. Making apk and ipa are to difficult  using expo.
 3. Size of the apk/ipa is huge

反应本地Cli

优点:

 1. Easily add native dependency for android and ios because this project structure have ios and android folder.
 2. Apk and ipa build making is easy rather than expo.

Note":- React Native cli is right approach to started work on react native framework.

缺点:-

1. High configuration machine is require.
2. Adding dependency some time more difficult but good.
3. Required basic knowledge of android folder structure and ios folder structure but from this learn more things.

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


2

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


expo update在获得Expo管理的大多数软件包的兼容版本方面做得很好。到目前为止,我不认为它会更新React Navigation,但该库实际上是由Expo赞助的。就个人而言,我很少遇到React Navigation和Expo之间的兼容性问题(我认为使用Beta版本时遇到了两个问题)。但是,您可能会看到与非Expo管理的程序包有更多的兼容性问题。
Christian Juth

2

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

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


我认为这不是博览会应用尚未准备好生产的充分理由。除此之外,以前的答案已对此进行了详尽的解释
达伍德吉

1

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


-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.