294

来自世博会网站

Expo 让 Web 开发人员只需用 JavaScript 编写一次即可构建真正的原生应用程序,这些应用程序可以在 iOS 和 Android 上运行。

这不是 React Native 所做的吗?有什么不同?

4

10 回答 10

279

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

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

  2. Expo 客户端:手机上的一个应用程序,可以让您在处理项目时打开项目,无需通过 XCode 或 Android Studio,还可以让其他人查看它们!如果您通过 发布它expo-cli,人们可以通过 Android 或 iOS 上的 Expo 客户端随时访问它,前提是登录到发布它的同一帐户。最后,我们还可以构建独立的应用程序,这样人们就不必使用 Expo 客户端来打开它,并且您可以根据需要分发到应用程序商店和 Play 商店。

所以 Expo 是一套建立在 React Native 之上的工具。这些工具依赖于 Expo 持有的一个关键信念:只要您拥有一整套暴露于 JavaScript 的 API,就可以构建大多数应用程序而无需编写本机代码。

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

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

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

阅读有关弹出的更多信息

于 2016-08-26T16:21:41.893 回答
149

Expo员工的文档和答案摘要:

反应原生初始化:

优点

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

缺点

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

世博会

优点

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

缺点

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

资料来源:

于 2018-03-16T15:44:23.500 回答
53

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


Expo 扩展了 React Native 的 API 表面

React Native 并没有为你提供开箱即用的所有 JS API,而只是提供了最原始的特性。React Native 开发者应该使用 Android Studio/XCode 来链接额外的原生库。Expo 旨在增强 RN 并提供满足最常见需求所需的所有 JS API。它基本上是一组定义明确的优质原生库,已经为您打包在一个库中:ExpoKit。有时这些库实际上已经存在于 RN 世界中,并集成到 ExpoKit 中。

同样重要的是要注意,Expo 团队不能将所有库都包含到 ExpoKit 中(这可能会造成一些挫败感),因为 hello world 应用程序的大小会增长,因为它会发布很多不会使用的 API在大多数应用程序中。

Expo 提供无线 JS 更新

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

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

Expo提供了一个通用客户端

Expo 客户端是一个通用客户端,允许加载任何与 Expo 兼容的应用程序。所有 Expo 应用程序都共享完全相同的本机运行时(RN + ExpoKit),唯一的区别是我们为它们提供的 JS。您发布到应用商店的 Expo 应用程序中包含硬编码的 JS 捆绑 URL。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 密钥、帮助您设置推送通知、配置文件……许多设置必须在构建时在应用程序中进行硬编码,并且可以不要在空中改变。

Expo 之于 React Native 就像 Phonegap 之于 Cordova

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

PhoneGap 类似于 Expo。他们都试图通过一组预定义的附加原生插件来丰富他们所构建的底层平台的原始 API。PhoneGap 还提供构建服务,并有一个通用客户端,只要您使用批准的插件,它就可以工作。

结论

如您所见,Expo 是一套工具。最后,它允许轻松开发、共享和发布您的移动项目到商店。它与PhoneGap 体验非常相似(但要好得多,也不会令人困惑)。

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

  • 您已经知道您需要的 API 在 Expo 中不可用,并且不会很快出现
  • 您非常关心您的应用程序大小(由于 ExpoKit 的大小,HelloWorld > 25mb,但之后它并没有增加太多,因为它只是 JS)
于 2018-01-15T21:46:14.473 回答
29
于 2017-03-26T22:36:36.097 回答
18

世博会 CLI

优点:

  1. 无需安装 Android Studio 或 Xcode 即可开始构建。
  2. 不需要太多的配置。
  3. 使用条形码扫描在 android 和 iphone 上轻松查看的移动 UI。使用在线 iphone 和 android 模拟器也更容易查看。
  4. 更快的设置和开发。

缺点:

  1. 无法添加本机依赖项。
  2. 创建.apk.ipa文件是困难的。
  3. apk/ipa 的大小很大。

反应本机 CLI

优点:

  1. 轻松添加本机依赖项。
  2. 创建文件.apk.ipa使用 Expo 容易得多

注意:React Native CLI 是用于直接使用 React Native 框架的框架。

缺点:

  1. 需要高水平的配置。
  2. 需要 Android 和 iOS 文件夹结构的基本知识。

如您所见,这两种方法各有利弊。您应该始终根据您对项目的需求来决定使用哪个。

于 2019-03-30T12:55:31.447 回答
4

关于 expo 和 react-native-cli 的优缺点的答案是完整的。我想提一点作为我的个人经验。Expo 默认在项目中包含许多模块,并且使用它更容易。但它在生产阶段有一个很大的问题,因为构建androidios版本的大小如此之大。'Hello World'例如,如果您有一个apk文件大小约为19 MB. 在 react-native-cli 中拥有相同的项目将导致应用程序的大小为6 MB.

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

于 2019-08-28T19:23:35.540 回答
3

我会在此说明 Expo 使用的是较旧版本的 react 16.5,这将禁止您使用新的钩子功能。如果您决定使用 Expo,请注意查看您的版本控制。如果您遇到奇怪的错误,则需要将旧版本的 say react-navigation 与 16.5 版本一起使用。

于 2019-04-15T16:11:24.507 回答
2

expo 是一个围绕 React Native 构建的工具链,可帮助您快速启动应用程序。它提供了一组工具来简化 React Native 应用程序和接口和服务的开发和测试,这些工具通常在第三方原生 React Native 组件中可用。使用 Expo,您可以在 Expo SDK 中找到所有这些。

于 2019-07-11T05:37:53.927 回答
2

我已经经历了一年多的与 expo 合作的经历Google Play 或其他商店中的应用程序您在删除 APK React-native 中的某些权限时遇到挑战您可以更改所有内容,但导入一些库(例如推送通知或地图)也需要一些挑战,因为您必须手动将这些库添加到安卓和iOS项目

于 2020-03-08T10:23:08.023 回答
0

Expo 是 react native cli 的包装器,它在底层做一些事情以方便开发人员,expo 解决的最常见问题,开发人员不必担心 react native cli 中经常出现的库的链接问题。Expo 现在提供了大量的库,它们对稳健的开发非常有帮助。expo 的好处之一是您可以通过 expo 移动应用程序开发适用于 android 和 ios 的应用程序,而无需使用 mac。

因为它有很多好处,所以使用 expo 有一些缺点

  • 应用程序大小像地狱一样增加。简单的 hello world 应用程序大小 > 30 mb
  • 有时,当您需要在应用程序中实现一些本机功能时,您需要从 expo 中退出并返回以响应本机 cli。而且您永远无法将其恢复为 expo cli。
于 2021-09-30T21:21:37.890 回答