web-dev-qa-db-ja.com

ExpoKitとReact Nativeプロジェクトの違い

React Nativeプロジェクト、CRNA、Expoプロジェクトの間の正確な違いとトレードオフを見つけるために、私は多くの研究をしました。

私の主なガイダンスは this

ただし、ExpoKitをネイティブコードで使用した場合と通常のReact通常のExpo API Reactネイティブプロジェクト。

Expoでプロジェクトを開始すると、ExpoKitプロジェクトまたはReact= Native project。両方でネイティブコードを使用できます。ExpoKitではExpo APIを使用できます。通常のReactネイティブプロジェクトではできません。

だから私の質問:

  1. ExpoKitプロジェクトでネイティブコードとすべてのExpo APIを使用できる場合、React Nativeプロジェクトを使用することに何の関心がありますか? ExpoKitプロジェクトでは、すべてのExpo APIとすべてのReact Native APIを使用できますか?!

  2. Expoをnpm install --save expoでインストールする場合、Expo APIをReact Nativeプロジェクトで使用できますか?

  3. React Native APIとExpo APIの違いは何ですか?

18
Benjamin Heinke

ExpoKitは、「純粋なJS」Expoアプリと「Vanilla」React Nativeのハイブリッドです。コアはまだReactネイティブプロジェクトですが、ビルドシステム、開発者の経験、利用可能な機能についてはいくつかの点で異なります。

特徴

今日現在、ExpoのSDKのAPIのほとんどはVanilla React Nativeプロジェクトでは使用できませんが、ExpoKitでは使用できます。これは将来変更される可能性があると思いますが、多くの作業が必要になります。

Expoのプッシュ通知サービスは、現在ExpoKitでも、Vanilla React Nativeでも動作しません。

ビルドシステム

Vanilla RNアプリとExpoKitアプリはどちらもXcodeとAndroid St​​udioを使用してネイティブコードをビルドします。 iOS ExpoKitアプリはCocoaPodsを使用して依存関係をインストールします。これにより、ネイティブビルドの管理が少し複雑になります。 Android ExpoKitアプリには、同じバイナリに複数のバージョンのReact Nativeをビルドするための追加のGradle構成があります(これは、複数のSDKバージョンのJSの無線アップデートを有効にするために使用されます)これにより、他のReactネイティブライブラリを追加する複雑さが増す場合があります。

ExpoKitとReact NativeプロジェクトのJavaScriptはMetroによって構築されますが、ExpoKitでは、プロジェクトの追加の構成を処理できるようにExpoのXDEまたはexpツールを使用してMetroを実行する必要があります。これは、exp startではなくreact-native run-Androidなどのコマンドを実行することを意味します。

ExpoKitの現在の設計により(これは将来変更される可能性がありますが)、一部のオープンソースReactネイティブライブラリにはExpoKitとの互換性の問題がある場合があります。たとえば、ネイティブライブラリがAndroid上のReact NativeのOkHttpインスタンスへの参照を要求できると想定している場合、Expoが複数のバージョンを許可するために使用する名前空間によりReactコンパイルするネイティブ。とはいえ、これらの問題は非常にまれである傾向があり、ExpoKitがエコシステム内のライブラリとの互換性を高めるためのいくつかの異なる方法に取り組んでいます。

この複数バージョンのサポートは、ExpoKitバイナリが対応するVanilla React Nativeバイナリよりも大きくなる傾向があることも意味しますが、これは将来変更される可能性があります。

あなたのサブ質問

  1. 一部の開発者は、JSバンドルとアセットの配布方法を自分で管理することを好むか、現在ExpoKitと互換性のないライブラリが必要な場合があります。バニラRNを好むもう1つの理由は、バイナリサイズです。
  2. 現在、React NativeプロジェクトでほとんどのExpo APIを使用することはできません。 Expo SDKで利用可能な一部のAPIは、オープンソースプロジェクト(react-native-mapsなど)からバンドルされており、Vanilla RNプロジェクトで使用できます。
  3. この質問を解析する方法がわかりません-Expo APIは現在ReactネイティブAPIであり、互いに対話する方法を知っており、実行している環境について特定の仮定を行います。

コメント1からの質問:ExpoKitビルドは必要に応じて変更できますが、編集の程度によっては、新しいSDKリリースへのアップグレードが少し難しくなる場合があります。

19
dikaiosune