Answers:
我在世博会工作!
当您编写代码时,Expo
您将编写React Native
代码。Expo
有两个主要部分:
1)expo-cli
:开发人员工具,用于创建项目,查看日志,在设备上打开,发布等。
2)Expo
客户端:您手机上的一个应用程序,可让您在处理项目时打开项目,而无需经历XCode
或Android Studio
,还可以让其他人查看它们!而且,如果您通过进行发布expo-cli
,Expo
则登录到与发布时使用的相同帐户的用户可以随时通过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
项目用作更大的标准本机项目的一部分。” 在这里阅读更多。
我尝试对来自Expo员工的文档和答案进行总结:
React Native初始化:
优点:
缺点:
世博会
优点:
缺点:
我希望我可以总结最重要的观点。请随时添加其他积分。
来源: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(一般官方文档)
Brent Vatne的回答很好,但我想补充一些细节。
React Native并没有为您提供所有需要的即开即用的JS API,而是只有大多数原始功能。React Native开发人员应使用Android Studio / XCode链接其他本地库。世博会旨在增强RN,并提供最常见需求所需的所有JS API。基本上,这是一组已定义好的质量本机库,已经为您打包在一个库中:ExpoKit。有时,这些库实际上已经存在于RN世界中,并已集成到ExpoKit中。
还需要注意的是,Expo团队不能将其中的每个库都包含在ExpoKit中(这可能会带来一些挫败感),因为世界应用程序的大小会增加,因为它将附带很多不会使用的API在大多数应用中
像其他系统(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键,帮助您设置推送通知,设置配置文件...许多设置必须在构建时在应用程序中进行硬编码,并且不可改变。
React Native与Cordova类似。它不是相同的视图技术(本机vs网络视图),但是两者都允许您从javascript控制本机功能,并且都提供了插件系统,以便开发人员可以轻松添加新的JS /本机绑定。
PhoneGap与Expo相似。他们都试图通过一组预定义的其他本机插件来丰富其所构建的基础平台的原始API。PhoneGap还提供构建服务,并具有通用客户端,只要您使用批准的插件,该客户端即可正常工作。
如您所见,Expo是一组工具。最后,它允许轻松地开发,共享和发布您的移动项目到商店。它与PhoneGap的体验非常相似(但是好多了,减少了混乱)。
对于这两个新的React Native新建项目,我将明确推荐Expo,以下两种情况除外:
在官方的Expo文档中对此进行了说明
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,就无法添加自己的本机模块。
Expo XDE
控制台或exp start
控制台命令输出中自动生成。
博览会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.
您可以根据需要选择任何方法。
我在这里要注意,Expo使用的是较早版本的react 16.5,这将禁止您使用新的hooks功能。如果您决定使用Expo,请注意观看版本控制。如果您遇到怪异的错误,则必须将旧版本的say react-navigation与16.5版本一起使用。
expo update
在获得Expo管理的大多数软件包的兼容版本方面做得很好。到目前为止,我不认为它会更新React Navigation,但该库实际上是由Expo赞助的。就个人而言,我很少遇到React Navigation和Expo之间的兼容性问题(我认为使用Beta版本时遇到了两个问题)。但是,您可能会看到与非Expo管理的程序包有更多的兼容性问题。
关于expo和react-native-cli的优缺点的答案是完整的。我想谈谈我的个人经历。Expo默认情况下在项目中包含许多模块,因此更易于使用。但这在生产阶段存在很大的问题,因为build android
和ios
版本的尺寸太大。例如,如果您的单个页面'Hello World'
的apk
文件大小约为19 MB
。在react-native-cli中拥有相同的项目将导致应用程序的大小为6 MB
。
因此,如果您要开发商业应用程序,我个人不建议使用expo。
我已经在Expo上工作了一年多。如果应用程序的大小对于您使用Expo来说并不重要,因为它易于实现Map,Push比React-native容易,但是在项目结束时,如果您想发布Google Play或其他商店中的应用程序,您需要在APK React-native中删除一些权限,但是您可以更改所有内容,但要导入某些库(例如推送通知)或地图也需要一些挑战,因为您必须手动将这些库添加到android和iOS项目
expo是围绕React Native构建的工具链,可帮助您快速启动应用程序。它提供了一组工具,可简化通常在第三方本机React Native组件中可用的React Native应用,界面和服务的开发和测试。借助Expo,您可以在Expo SDK中找到所有它们。