Expo和React Native的区别是什么?



来自世博网站

Expo让web开发者可以用JavaScript编写一次真正的本地应用程序,并在iOS和Android上运行。

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

当你在Expo中编写代码时,你就是在编写React Native代码。世博会已经两个主要部分:

  1. Expo CLI (expo-cli):一个开发者工具,用于创建项目、查看日志、在设备上打开、发布等。

  2. Expo client:手机上的一个应用程序,可以让你打开你的项目当你在制作它们时,不需要通过XCode或Android Studio,也可以让其他人看到它们!如果您通过expo-cli发布,人们可以随时通过Android或iOS的博览会客户端访问,只要登录与发布时相同的帐户。最后,我们还可以构建独立的应用程序,这样人们就不必使用Expo客户端来打开它,如果你喜欢,你可以分发到应用程序商店和play商店。

所以Expo是一套建立在React Native之上的工具。这些工具依赖于博览会上的一个关键信念:只要你有一套面向JavaScript的全面api,就有可能在不需要编写本机代码的情况下构建大多数应用程序。

这很重要,因为使用React Native,你总是可以下拉到本地代码。有时候这是非常有用的,但它是有代价的:如果你想让他们测试你的二进制文件,你需要把你的二进制文件发送给别人,世界另一边的人不能在你工作的时候点击一个链接来打开它,你不能像在浏览器中那样点击一下就发布它。

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

但是,如果您必须发现您想要下拉到本机,您可以使用弹出并继续使用Expo为您提供的本机api,同时具有与任何本机项目相同的控制级别。

阅读更多关于弹出

文档摘要和世博员工的回答:

React Native init:

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

缺点
  • 需要Android Studio和Xcode来运行
  • 你不能没有Mac就开发iOS
  • 设备必须通过USB连接才能使用它进行测试
  • 字体需要在Xcode中手动导入
  • 如果你想分享应用程序,你需要发送整个.apk/.ipa文件
  • 不提供开箱即用的JavaScript api,例如Push-Notifications, Asset Manager,它们需要手动安装并与npm链接,例如
  • 正确设置一个工作项目(包括设备配置)是相当复杂的,可能需要时间
<标题> 世博会

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

缺点
  • 你不能添加本地模块(可能会改变游戏规则)
  • 你不能在Objective-C/Java中使用使用本机代码的库
  • 标准的Hello World应用大约有25MB大(因为集成了库)
  • 如果你想使用:FaceDetector, ARKit,或支付,你需要弹出它到ExpoKit
  • 将其弹出到ExpoKit需要权衡Expo的特性,例如,您不能通过QR码分享
  • 当弹出到ExpoKit时,您被限制为由ExpoKit支持的react-native版本,然后
  • 在ExpoKit中调试(使用本地模块)要复杂得多,因为它混合了两种语言和不同的库(没有官方的Expo支持)

来源:

  • 将Expo Apps卸载到ExpoKit: Concepts
  • react-native-init和create-react-native-app #516的区别
  • 弹出到ExpoKit

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


Expo扩展了React Native的API界面

React Native并没有给你所有你需要的开箱即用的JavaScript api,只有最基本的功能。React Native开发人员应该使用Android Studio或Xcode来链接其他本地库。

Expo旨在增强React Native,并提供您最常见需求所需的所有JavaScript api。它基本上是一组定义良好的高质量本地库,已经为您打包在一个库中:ExpoKit。有时这些库实际上已经存在于React Native世界中,并集成到ExpoKit中。

还需要注意的是,Expo团队不能将所有库都包含到ExpoKit中(这可能会造成一些挫折),因为Hello, World!应用程序的大小将会增长,因为它会发布许多在大多数应用程序中不会使用的API。

Expo提供无线JavaScript更新

与其他系统(CodePush等)一样,Expo提供了一个通过无线方式更新应用程序的系统。这意味着你在CDN上上传你的JavaScript包,移动应用程序将自动下载并在下次启动时使用新的JavaScript代码(无需请求商店的发布/审查)。

Expo提供了一个CLI工具来上传/管理CDN上的JavaScript包。对于开发,您还可以选择成为CDN并在localhost上托管JavaScript包。Expo XDE只是CLI上的一个可视化包装器。

Expo提供了一个通用客户端

Expo客户端是一个通用客户端,允许加载任何与Expo兼容的应用程序。所有的Expo应用都共享相同的本机运行时(React native + ExpoKit)。唯一的区别是我们给他们的JavaScript代码。你发布到应用商店的Expo应用会硬编码你的JavaScript bundle URL。Expo客户端以特定的方式构建,因此您可以通过扫描二维码或提供URL来选择从哪个URL加载JS。

请注意,这个客户端也可以从本地主机加载JavaScript包,并使您的开发体验更轻松:不需要Xcode或Android Studio,并且它可以更快地获得您的第一个Hello, World! app在手机上运行(从小时到分钟)。你可以在没有Mac的情况下在iPhone上开发游戏,设置过程只需要两分钟。

实际上,由于世博SDK是可以升级的,世博客户端包含了一个兼容层,可以运行最新的五个SDK版本。

Expo提供构建服务

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

Expo构建的两个应用程序的主要区别在于硬编码的URL,应用程序应该下载JavaScript包以运行。

Expo为你做了一些其他的事情,比如提供一种声明式的方式来设置应用程序图标、方向、权限、API密钥,帮助你设置推送通知、配置文件……许多设置必须在应用程序的构建时硬编码,并且不能通过无线方式更改。

Expo之于React Native就像PhoneGap之于Cordova

React Native与Cordova类似。它们不是同一种视图技术(原生视图和webview),但都允许你从JavaScript中控制原生特性,并且都提供了一个插件系统,这样开发人员就可以轻松地添加新的JavaScript和原生绑定。

PhoneGap类似于Expo。它们都试图用一组预定义的附加本地插件来丰富底层平台的原始API。PhoneGap还提供了一个构建服务,并有一个通用的客户端,只要你使用批准的插件。

结论

正如你所看到的,Expo是一套工具。最后,它允许轻松地开发,分享和发布到商店你的移动项目。它与PhoneGap的体验非常相似(但要好得多,更少令人困惑)。

对于任何新的React Native绿地项目,我绝对会推荐Expo,除了这两种情况:

  • 您已经知道您需要的API在Expo中不可用,并且不会很快出现
  • 你很在意你的应用程序大小(Hello, World!是超过25mb由于大的大小的ExpoKit,但它不会增加太多,因为它只是JavaScript)

在世博官方文档

中有解释

Expo和React Native有什么区别?

Expo有点像Rails for React Native。很多事情都为你准备好了,所以你可以更快地开始并走上正确的道路。

使用Expo,你不需要Xcode或Android Studio。你只需使用任何你喜欢的文本编辑器(Atom, vim, emacs, Sublime, VS Code,任何你喜欢的)编写JavaScript。你可以在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分钟或更短的时间内在Expo上使其工作。

即时更新

所有的博览会应用程序可以在几秒钟内更新,只需点击发布在XDE。你不需要设置任何东西;就是这样。如果您没有使用Expo,您可以使用Microsoft Code Push或针对此问题推出您自己的解决方案

资产管理

图片、视频、字体等都是通过Expo在互联网上动态发布的。这意味着它们可以进行即时更新,并且可以随时更改。Expo内置的资产管理系统负责将您的repo中的所有资产上传到CDN,以便任何人都可以快速加载。

如果没有Expo,通常的做法是将你的资产捆绑到你的应用中,这意味着你不能改变它们。或者你必须自己管理把你的资产放在CDN或类似的地方。

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

我们每隔几周就发布一次新的Expo。如果你愿意,你可以继续使用旧版本的React Native,或者升级到一个新版本,而不用担心重新构建应用程序的二进制文件。你可以自己考虑升级JavaScript。

Expo最大的限制是你不能在没有分离和使用ExpoKit的情况下添加自己的本地模块。

Expo CLI

优点:

    无需安装Android Studio或Xcode即可开始构建。
  1. 不需要很多配置
  2. 移动用户界面,方便地查看Android和iPhone使用条码扫描。也更容易查看与在线iPhone和Android模拟器。
  3. 更快的设置和开发。

缺点:

  1. 本地依赖不能被添加。
  2. .apk.ipa文件创建困难
  3. apk/ipa的大小很大。

React Native CLI

优点:

  1. 轻松添加本地依赖项。
  2. 创建.apk.ipa文件比使用Expo更容易

注意:React Native CLI是用来直接与React Native框架工作的框架。

缺点:

  1. 需要高水平的配置。
  2. 需要了解Android和iOS的文件夹结构。

正如你所看到的,两种方法都有各自的优缺点;您应该始终根据项目的需要来决定使用哪一种。

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

Expo在项目中默认包含许多模块,这使得它更容易使用。但它在制作阶段遇到了一个大问题,因为构建的Android和iOS版本具有非常大的尺寸。例如,如果您有一个带有"Hello, World!", APK文件大小约为 19mb 。在React Native CLI中使用相同的项目将导致应用程序的大小为 6mb

所以我个人不建议使用Expo,如果你想开发一个商业应用。

Expo是一个React Native CLI的包装器,它在底层做一些事情以方便开发人员。Expo解决的最常见的问题是,开发人员不必担心React Native CLI中经常出现的库的链接问题。Expo现在提供了大量的库,这些库对稳健的开发非常有帮助。世博会的一个好处是,你可以在没有Mac的情况下,通过世博会的移动应用程序开发Android和iOS应用程序。

虽然它有很多好处,但使用Expo也有一些缺点:

  • 应用程序大小像地狱一样增加。一个简单的Hello, World! app大小大于30mb
  • 有时候,当你需要在你的应用中实现一些本地功能时,你需要退出Expo,回到React native CLI。而且你永远不能把它恢复到Expo CLI。

我要在这里说明一下,Expo使用的是旧版本的React, 16.5,这将禁止您使用新的hooks功能。

如果你决定使用Expo,要注意你的版本控制。旧版本的react-navigation将需要在16.5版本中使用,如果你得到奇怪的错误。

我在世博工作了一年多。如果应用的大小对你来说并不重要,那就使用Expo,因为它比React-native更容易实现地图和推送,但在项目结束时,如果你想在Google Play或其他商店发布应用,你就会面临移除APK中权限的挑战。

在React Native中你可以改变一切,但是对于导入一些库,如推送通知或地图,它也需要一些挑战,因为你必须手动将这些库添加到Android和iOS项目中。

世博员工答问总结:

React Native init:优势

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

缺点需要Android Studio和Xcode来运行项目如果没有Mac,你就无法面向iOS开发游戏设备必须通过USB连接才能使用它进行测试字体需要在Xcode中手动导入如果你想共享应用程序,你需要发送整个。apk/。ipa文件不提供开箱即用的JavaScript 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支持的反应原生版本在ExpoKit中调试(使用本地模块)要复杂得多,因为它混合了两种语言和不同的库(不再支持官方的Expo)

Expo和React Native是构建移动应用的两种流行工具,但它们有一些不同之处。Expo是一个免费的开源平台,允许开发者使用JavaScript和React Native快速构建应用程序。它提供了一组工具、库和服务,使构建移动应用程序变得更容易。另一方面,React Native是一个使用React构建移动应用程序的框架。React Native提供了一种更直接的方式来访问本地api和组件,并允许对应用程序开发过程进行更多的定制和控制。总之,Expo提供了一种更快、更简单的方式来开始构建移动应用程序,而React Native提供了更多的控制和定制。

Expo和React Native的另一个区别是部署过程。有了Expo,你只需点击几下鼠标,就可以直接将应用发布到应用商店。您还可以利用Expo提供的其他服务,例如推送通知和身份验证。另一方面,当构建React Native应用程序时,你需要使用Xcode或Android Studio等工具来编译和打包应用程序以供部署。此外,你必须自己处理发行过程,这既费时又复杂。

在性能方面,React Native通常比Expo有更好的性能,因为它可以直接访问本地api和组件,而Expo依赖于它的SDK。但是,在许多情况下,性能差异可能并不显著。

总之, Expo和React Native都有各自的优点和缺点,它们之间的选择取决于你项目的具体需求和目标。如果你刚刚开始移动应用开发,想要一个快速简单的开始方式,Expo是一个很好的选择。然而,如果你想要更多的控制和定制,React Native可能是更好的选择。

相关内容

  • 没有找到相关文章

最新更新