首页 文章

ExpoKit和React Native项目之间的区别

提问于
浏览
7

我现在做了很多研究,以找出React Native项目,CRNA和Expo项目之间的确切差异和权衡 .

我的主要指导是this

但是我仍然不明白我使用带有本机代码的ExpoKit与使用本机代码的普通React Native项目有什么(dis-)优势,除了我不能在普通的React Native项目中使用Expo API .

我知道当我在Expo开始一个项目时,我可以将它作为ExpoKit项目或React Native项目弹出 . 在两者中我都可以使用本机代码 . 在ExpoKit中,我仍然可以在普通的React Native项目中使用Expo API .

所以我的问题:

  • 如果我可以在ExpoKit项目中使用本机代码和所有Expo API,那么使用react本机项目会有什么兴趣?在ExpoKit项目中,我仍然可以使用所有Expo API和所有React Native API,对吧?!

  • 如果我用 npm install --save expo 安装expo,我可以在React Native项目中使用Expo API吗?

  • React Native API和Expo API有什么区别?

2 回答

  • 12

    Expo是一个开发环境,允许您只使用JavaScript并将您与实际的本机技术堆栈(Android,iOS / apk,Android Studio,XCode等)隔离开来 . 它允许实时重新加载,就像使用Webpack构建网站一样 . 默认情况下,create-react-native-app脚本使用Expo构建项目,但它还为其配备了“弹出”脚本,该脚本将其转换为“正常”模式,您可以在此模式下在Android Studio / XCode中构建项目 . 通常 .

    我写了an article on Medium关于Expo和"ejected"模式之间的差异,以及如何同时使用两个Git技巧 .

  • -1

    ExpoKit是“纯JS”世博应用和“香草”React Native之间的混合体 . 它的核心仍然是React Native项目,但是有一些关于构建系统,开发人员体验和可用功能的不同之处 .

    功能

    截至今天,Expo的SDK中的大多数API都不在香草React Native项目中提供,但它们在ExpoKit中可用 . 我们认为这可能会在未来发生变化,但这将是很多工作 .

    Expo的推送通知服务目前不适用于ExpoKit,也不适用于香草React Native .

    构建系统

    vanilla RN应用程序和ExpoKit应用程序都使用Xcode和Android Studio来构建本机代码 . iOS ExpoKit应用程序使用CocoaPods来安装依赖项,这可能会增加管理本机构建的一些复杂性 . Android ExpoKit应用程序具有额外的Gradle配置,可将多个版本的React Native构建到同一个二进制文件中(这用于启用多个SDK版本的JS的无线更新),这有时会增加添加其他React Native库的复杂性 .

    ExpoKit和React Native项目的JavaScript由Metro构建,但在ExpoKit中,您需要使用Expo的XDE或exp工具运行Metro,以便他们可以处理项目的额外配置 . 这意味着您运行的命令如 exp start 而不是 react-native run-android .

    由于ExpoKit的当前设计(虽然这可能在未来发生变化),但一些开源的React Native库可能与ExpoKit存在兼容性问题 . 例如,如果本机库希望能够在Android上请求对React Native的OkHttp实例的引用,则在ExpoKit中运行时可能存在类型不匹配,因为Expo使用的命名空间允许编译多个版本的React Native . 也就是说,这些问题往往非常罕见,我们正在研究一些不同的方式让ExpoKit与生态系统中的图书馆越来越兼容 .

    这种多版本支持还意味着ExpoKit二进制文件往往比相应的香草React Native二进制文件更大,尽管这可能在将来发生变化 .

    您的子问题

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

    • 目前无法在React Native项目中使用大多数Expo API . Expo SDK中提供的一些API与开源项目(例如react-native-maps)捆绑在一起,可以与vanilla RN项目一起使用 .

    • 我'm not sure how to parse this question -- Expo APIs are currently just React Native APIs which know how to talk to each other and make certain assumptions about the environment they'重新开始运行 .

    评论1中的问题:您可以随意修改ExpoKit构建,但根据您编辑它的程度,可能会更难以升级到较新的SDK版本 .

相关问题