当前位置: 首页 > 知识库问答 >
问题:

ExpoKit和React本机项目之间的差异

游鸣
2023-03-14

我现在做了很多研究,以找出React Native项目、CRNA和世博会项目之间的确切区别和取舍。

我的主要指导是

但是,我仍然不明白,与使用本机代码的普通React本机项目相比,使用ExpoKit和本机代码有什么(不)优势,除了我不能在普通React本机项目中使用Expo API这一事实。

我知道,当我在世博会上启动一个项目时,我可以将其作为ExpoKit项目或React原生项目弹出。在这两种情况下,我都可以使用本机代码。在ExpoKit中,我仍然可以在正常的React原生项目中使用ExpoAPI,但我不能。

所以我的问题是:

>

  • 如果我可以在ExpoKit项目中使用本机代码和所有ExpoKit API,我对使用反应本机项目有什么兴趣?在ExpoKit项目中,我仍然可以使用所有的博览会API和所有的React Native API,对吗?!

    如果我使用npm安装--save Expo安装Expo,是否可以在React原生项目中使用Expo API?

    React原生API和Expo API之间有什么区别?

  • 共有2个答案

    汤弘文
    2023-03-14

    请注意2020年后偶然发现这一点的人。。。ExpoKit已被弃用,因此整个问题都没有意义。

    来自博览会的留档:“ExpoKit已被弃用,对ExpoKit的支持将在SDK 38之后删除。我们建议弹出到裸工作流。"

    傅正阳
    2023-03-14

    ExpoKit是“纯JS”Expo应用程序和“香草”React Native应用程序的混合体。它的核心仍然是一个React原生项目,但在构建系统、开发人员经验和可用功能方面有一些不同之处。

    到目前为止,Expo SDK中的大多数API都无法在本机项目中使用,但可以在ExpoKit中使用。我们认为这在将来可能会改变,但这将是一个很大的工作。

    Expo的推送通知服务目前不适用于ExpoKit,也不适用于本机。

    香草RN应用程序和ExpoKit应用程序都使用Xcode和Android Studio构建本机代码。iOS ExpoKit应用程序使用CoCoapod安装依赖项,这会给管理本机构建增加一点复杂性。Android ExpoKit应用程序具有额外的Gradle配置,可以将多个版本的React Native构建到同一个二进制文件中(用于支持对多个SDK版本的JS进行空中更新),这有时会增加添加其他React Native库的复杂性。

    ExpoKit和React本机项目的JavaScript由Metro构建,但在ExpoKit中,您需要使用Expo的XDE或exp工具运行Metro,以便它们能够处理项目的额外配置。这意味着您可以运行类似于exp start的命令,而不是react native run android

    由于ExpoKit的当前设计(尽管将来可能会改变),一些开源React本机库可能与ExpoKit存在兼容性问题。例如,如果本机库希望能够请求引用以在Android上React-native的OkHttp实例,则在ExpoKit内部运行时可能存在类型不匹配,因为Expo使用名称空间来允许编译多个版本的React-native。也就是说,这些问题往往非常罕见,我们正在研究几种不同的方法,使ExpoKit与生态系统中的库越来越兼容。

    这种多版本支持还意味着ExpoKit二进制文件往往比相应的本地二进制文件更大,尽管将来可能会发生变化。

    1. 一些开发人员更喜欢自己管理JS包和资产的分发方式,或者他们可能需要一个目前与ExpoKit不兼容的库。二进制大小是您可能更喜欢香草RN的另一个原因

    评论1中的问题:您可以随心所欲地修改ExpoKit构建,但这可能会使升级到更新的SDK版本变得稍微困难,具体取决于您对它的编辑程度。

     类似资料:
    • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

    • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

    • 我正在尝试添加模块依赖项。 当我写作时, 执行项目(`:服务') 它向我展示了一些错误,比如, 无法解决":app@debugUnitTest /compileClasspath"的依赖关系:无法解决项目:服务。 和, 相同:app@debugAndroidTest/compileClasspath,:app@debug/compileClasspath和:app@release/编译路径 但是,

    • 问题内容: 我阅读了Sun文档以及有关Stack Overflow的大量文章,但是对于Java编译器选项和的区别,我仍然感到困惑。 假设我具有以下目录结构: 还要说我在package中有一个源文件,并且该目录结构在source文件夹中是可以的。 我在 project1 目录中并运行: 要么 和我得到相同的结果。在详细模式下,两种情况下都将搜索源文件。 如果有人可以帮助我弄清楚这些选项的细节,那将是

    • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?