【发布时间】:2017-01-03 09:09:40
【问题描述】:
Expo 让 Web 开发人员只需使用 JavaScript 编写一次,即可构建可在 iOS 和 Android 上运行的真正原生应用程序。
这不是 React Native 所做的吗?有什么区别?
【问题讨论】:
标签: react-native react-native-android expo react-native-ios exponentjs
Expo 让 Web 开发人员只需使用 JavaScript 编写一次,即可构建可在 iOS 和 Android 上运行的真正原生应用程序。
这不是 React Native 所做的吗?有什么区别?
【问题讨论】:
标签: react-native react-native-android expo react-native-ios exponentjs
当您在 Expo 中编写代码时,您正在编写 React Native 代码。世博有 两个主要部分:
Expo CLI (expo-cli):用于创建项目、查看日志、在您的设备上打开、发布等的开发者工具。
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,同时拥有与任何原生项目相同级别的控制。
【讨论】:
Expo 员工的文档和回答摘要:
.apk / .ipa 文件.apk 或.ipa 文件.apk 和 .ipa 文件(可以通过 Expo 分发到商店)来源:
【讨论】:
Brent Vatne 的回答很好,但我想补充一些细节。
React Native 并没有为您提供开箱即用的所有 JS API,而只提供最原始的功能。 React Native 开发者应该使用 Android Studio/XCode 来链接额外的原生库。 Expo 旨在增强 RN 并提供满足最常见需求所需的所有 JS API。它基本上是一组定义明确的优质原生库,已经为您打包在一个库中:ExpoKit。有时这些库实际上已经存在于 RN 世界中,并集成到 ExpoKit 中。
同样重要的是要注意,Expo 团队不能将所有库都包含到 ExpoKit 中(这可能会造成一些挫败感),因为 hello world 应用程序的大小会增长,因为它会发布很多 API不能在大多数应用中使用。
与其他系统(CodePush...)一样,Expo 提供了一个系统来通过无线方式更新您的应用程序。这意味着您将 JS 包上传到 CDN,移动应用程序将在下次启动时自动下载并使用新的 JS(无需从商店请求发布/审查)。
Expo 提供了一个 CLI 工具来上传/管理其 CDN 上的 JS 包。对于开发,您还可以选择成为 CDN 并在 localhost 上托管 JS 包。 XDE 只是 CLI 上的一个可视化包装器。
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 构建的 2 个应用程序的主要区别在于应用程序应该下载 JS 包以运行的硬编码 url。
Expo 还为您做一些其他事情,例如提供一种声明方式来设置应用程序图标、方向、权限、api 键,帮助您设置推送通知、配置文件...许多设置必须在构建时在应用程序,不能通过无线方式更改。
React Native 类似于 Cordova。它不是同一种视图技术(native vs webview),但都允许您从 javascript 控制原生功能,并且都提供插件系统,以便开发人员可以轻松添加新的 JS/native 绑定。
PhoneGap 类似于 Expo。他们都试图通过一组预定义的附加原生插件来丰富他们所构建的底层平台的原始 API。 PhoneGap 还提供build service 和generic client,只要您使用经批准的插件即可使用。
如您所见,Expo 是一组工具。最后,它允许轻松开发、共享和发布您的移动项目到商店。它与 PhoneGap 的体验非常相似(但要好得多,也不那么令人困惑)。
我会明确地向任何新的 React Native 新建项目推荐 Expo,除了这两种情况:
【讨论】:
在Expo官方文档中有说明
What is the difference between Expo and 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 应用程序。
推送通知
推送通知在 iOS 和 Android 上开箱即用,使用一个统一的 API。您不必设置 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,就无法添加自己的原生模块。
【讨论】:
Expo XDE 控制台或exp start 控制台命令输出中自动生成。
expo start 还会在您的本地主机上显示一个 IP 地址,您可以从中访问二维码
优点:
缺点:
.apk 和.ipa 文件很困难。优点:
.apk 和 .ipa 文件比使用 Expo 容易得多注意:React Native CLI 是用于直接使用 React Native 框架的框架。
缺点:
如您所见,这两种方法各有利弊;您应该始终根据您对项目的需要来决定使用哪个。
【讨论】:
关于 expo 和 react-native-cli 的优缺点的答案是完整的。我想提一点作为我的个人经验。 Expo 默认在项目中包含许多模块,并且使用它更容易。但它在生产阶段有一个大问题,因为内置的android 和ios 版本有这么大的尺寸。例如,如果您有一个带有'Hello World' 的页面,则apk 文件大小约为19 MB。在 react-native-cli 中拥有相同的项目将产生一个大小为6 MB 的应用程序。
因此,如果您想开发商业应用程序,我个人不建议使用 expo。
【讨论】:
我会在此说明 Expo 使用的是较旧版本的 react 16.5,这将禁止您使用新的钩子功能。如果您决定使用 Expo,请注意查看您的版本控制。如果您遇到奇怪的错误,则需要将旧版本的 say react-navigation 与 16.5 版本一起使用。
【讨论】:
expo update 在获得 Expo 管理的大多数软件包的兼容版本方面做得非常好。截至目前,我认为它不会更新 React Navigation,但该库实际上是由 Expo 赞助的。就个人而言,我很少遇到 React Navigation 和 Expo 之间的兼容性问题(我想我在使用 beta 版本时遇到了几个问题)。但是,您可能会看到更多不由 Expo 管理的软件包的兼容性问题。
expo 是一个围绕 React Native 构建的工具链,可帮助您快速启动应用程序。 它提供了一组工具来简化 React Native 应用程序和接口和服务的开发和测试,这些工具通常在第三方原生 React Native 组件中可用。使用 Expo,您可以在 Expo SDK 中找到所有这些。
【讨论】:
我已经体验了一年多与 expo 合作的经历 如果应用程序的大小对您不重要,请使用 Expo,因为它很容易实现 Map,Push 比 React-native 更容易,但是如果您想在 Google Play 或其他商店中发布应用程序,您将在项目结束时遇到挑战删除 APK 中的一些权限 React-native 您可以更改所有内容,但导入一些库(例如推送通知或地图)也需要一些挑战,因为您必须手动将这些库添加到 android 和 iOS 项目中
【讨论】:
expo 是 react native cli 的封装器,它在底层做一些事情以方便开发人员,expo 解决的最常见问题,开发人员不必担心 react native 中经常出现的库的链接问题cli。 Expo 现在提供了大量的库,它们对稳健的开发非常有帮助。 expo 的好处之一是您可以通过 expo 移动应用程序开发适用于 android 和 ios 的应用程序,而无需使用 mac。
因为它有很多好处,所以使用 expo 也有一些缺点
【讨论】: