Expo和React Native有什么区别?

Aur*_*ora 149 exponentjs expo

来自世博会网站

Expo允许Web开发人员通过JavaScript编写一次,构建真正适用于iOS和Android的本机应用程序.

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

bre*_*tne 177

我在世博会工作!

在编写代码时Expo编写React Native代码.Expo有两个主要部分:

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

2)Expo客户:您的手机上的应用程序,让你打开,而你对他们的工作你的项目,而无需经历XCode或者Android Studio,也可以让其他人查看它们呢!如果你发布它expo-cli,人们可以随时通过ExpoAndroid或iOS上的客户端访问它,如果登录到它发布的同一帐户.最后,我们还可以构建独立的应用程序,以便人们不必使用Expo客户端打开它,如果您愿意,您可以分发到应用商店和商店.

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

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

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

但是,如果您必须发现绝对是本机的,那么您可以ExpoKit继续使用Expo提供给您的本机API,同时具有与任何本机项目相同的控制级别." ExpoKit是一个Objective-C和Java库,它允许您将Expo平台和现有Expo项目用作更大的标准本机项目的一部分." 在这里阅读更多.

  • “使用指数,您将无法使用本机代码”。很高兴知道您不必使用本机代码,但是如果需要的话,为什么指数会阻止您这样做呢? (3认同)
  • 啊,我知道这还不清楚。因此,Exponent客户端是完全开源的(https://github.com/exponentjs/exponent),这意味着您可以根据需要编写本机代码,但是实际上您只是将Exponent库视为本机模块中的本机模块集合。否则是典型的React Native应用。这很好,并且是我们开源该项目的动力。就是说,如果您希望能够使用我们的工具(应用程序二进制生成器,应用程序/播放商店上的Exponent客户端来共享测试版本,内置的推送通知等),则无法编写本机代码。 (2认同)
  • 在撰写本文时,Expo 在集成有用的本机插件方面已经相当出色。然而,他们缺乏 IAP 的主要插件集成,没有它,你就无法从你的应用程序中赚钱!你会问,如果我不能盈利,做一个应用程序还有什么意义!! (2认同)

Ben*_*nke 68

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

React Native init:

优点:

  • 您可以添加用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 o付款,您需要将其弹出到ExpoKit
  • 将它弹出到ExpoKit需要权衡世博会的功能,例如你无法通过二维码分享
  • 当弹出到ExpoKit时,您只能使用当时ExpoKit支持的本机版本
  • 在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(一般官方文件)

  • 设备不必连接到 USB 进行测试,只需通过 USB 完成第一次编译和安装。稍后您可以使用Wi-Fi!如果您对本机进行更改,则需要重新编译。 (3认同)

gum*_*ins 22

它在官方的世博文档中有解释

Expo和React Native有什么区别?

世博会有点像Ract for React Native.为您设置了很多东西,所以开始并走上正确的道路更快.

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

以下是Expo为您提供的一些即时工作的东西:

支持iOS和Android

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

推送通知

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

Facebook登入

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

即时更新

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

资产管理

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

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

更新到新的React Native版本更容易

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

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

关于Expo的最大限制是,如果不拆分和使用ExpoKit,就无法添加自己的原生模块.

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

Seb*_*ber 13

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构建的2个应用程序的主要事情只是应用程序应该下载要运行的JS包的硬编码URL.

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

世博会对React Native来说是什么Phonegap是Cordova

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

PhoneGap与Expo类似.他们都尝试使用一组预定义的其他本机插件来丰富它们构建的底层平台的原始API.PhoneGap还提供构建服务,并且只要您使用已批准的插件,就可以使用通用客户端.

结论

如你所见,世博会是一套工具.最后,它允许轻松开发,共享和发布您的移动项目的商店.它与PhoneGap体验非常相似(但更好,更少混淆).

我将明确推荐任何新的React Native绿地项目的Expo,除了以下两种情况:

  • 您已经知道自己需要在世博会上不具备的API,并且不会很快就会出现
  • 你非常关心你的应用程序大小(因为大尺寸的ExpoKit,HelloWorld大于25mb,但之后它并没有增加太多,因为它只是JS)

  • 我试图找到一个 API 的 Expo 不支持的列表。有谁知道在哪里可以找到这个? (2认同)
  • @ronnyrr 我认为这就是您要查找的内容:https://expo.canny.io/ 这是您可以按受欢迎程度排序的功能请求列表 (2认同)

Mei*_*ari 9

关于Expo和React Native CLI的优缺点的答案已经完成。我想提一点,作为我的个人经历。

Expo在项目中默认包含许多模块,这使得使用它更加容易。但它在生产阶段有一个很大的问题,因为构建的 Android 和 iOS 版本的体积太大。例如,如果您有一个带有“Hello, World!”的页面,则APK文件大小约为19 MB。在 React Native CLI 中拥有相同的项目将导致应用程序大小为6 MB

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

  • 我认为这不足以成为世博会应用程序未做好生产准备的充分理由。除此之外,之前的答案已经彻底解释了这一点 (2认同)

Atu*_*ari 6

博览会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.
Run Code Online (Sandbox Code Playgroud)

缺点:-

 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
Run Code Online (Sandbox Code Playgroud)

反应本地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.
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

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


小智 6

Expo 是React Native CLI的包装器,它在幕后做一些事情,以方便开发人员。Expo 解决的最常见问题是开发人员不必担心 React Native CLI 中经常出现的库链接问题。Expo 现在提供了大量的库,这对于稳健的开发非常有帮助。Expo 的好处之一是您可以通过 Expo 移动应用程序开发适用于 Android 和 iOS 的应用程序,而无需使用 Mac。

\n

尽管有很多好处,但使用 Expo 也有一些缺点:

\n
    \n
  • 应用程序的大小急剧增加。一个简单的你好,世界!应用程序大小超过 30\xc2\xa0MB
  • \n
  • 有时,当您需要在应用程序中实现一些本机功能时,您需要从 Expo 弹出并返回到 React Native CLI。而且您永远无法将其恢复回 Expo CLI。
  • \n
\n