web-dev-qa-db-ja.com

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

から エキスポのウェブサイト

Expoを使うと、Web開発者はiOSとAndroidの両方で機能する真のネイティブアプリケーションを、JavaScriptで1回作成するだけで作成できます。

これはReact Nativeがしていることではありませんか?違いは何ですか?

116
Aurora

私は万博で働いています!

Expoでコードを書くとき、あなたはReact Nativeコードを書く。 Expoには2つの主要部分があります。

1)expo-cli:プロジェクトの作成、ログの閲覧、あなたのデバイスでのオープン、公開などのための開発者ツール.

2)Expoクライアント:あなたのプロジェクトの作業中にXCodeAndroid Studioを通さずにプロジェクトを開くことができ、また他の人にも見せてもらうことができる、携帯電話上のアプリ。 expo-cliを通じて公開した場合、公開されたアカウントと同じアカウントにサインインしていれば、AndroidまたはiOSのExpoクライアントを通じていつでもアクセスできます。最後に、私たちはまた、スタンドアローンのアプリケーションを構築することも可能にしているので、人々はそれを開くためにExpoクライアントを使用する必要はなく、あなたはあなたが好きならApp StoreとPlay Storeに配ることができます。

したがって、ExpoReact Nativeの上/周囲に構築されたツールのセットです。これらのツールは、私たちがExpoで持っている1つの重要な信念に依存しています。Javascriptに公開されているAPIの包括的なセットがあれば、ネイティブコードを書く必要なしにほとんどのアプリを構築できます。

React Nativeを使えばいつでもネイティブコードにドロップできるのでこれは重要です。これは時々信じられないほど便利ですが、犠牲になります:あなたが彼らにテストしてほしいのであればあなたのバイナリをあなたのバイナリに送る必要があります。ブラウザで行うのと同じように、ワンクリックでアクセスして他の人にアクセスすることはできません。

可能であれば、Expoを使用して、ネイティブコードに落とさないようにすることをお勧めします。前述したように、Javascriptで利用できる包括的なAPIのセットでは、これはほとんどのアプリには必要ないはずです。そのため、この包括的なAPIセットを提供し、ネイティブランタイムが共有されている世界に存在する可能性のある素晴らしいツールをすべて構築することを目指しています。

ただし、絶対にネイティブにする必要がある場合は、ExpoKitを使用して、ネイティブプロジェクトと同じレベルの制御を行いながら、Expoから得られるネイティブAPIを引き続き使用できます。 「ExpoKitは、Expoプラットフォームと既存のExpoプロジェクトをより大きな標準のネイティブプロジェクトの一部として使用できるようにするObjective-CとJavaのライブラリです。」 もっと読む。

154
brentvatne

私は万博の従業員からの文書と答えの要約をやろうとしました:

ネイティブinitを反応させなさい:

利点

  • Java/Objective-Cで書かれたネイティブモジュールを追加することができます(おそらく唯一のもので最も強力なもの)

デメリット

  • プロジェクトを実行するにはAndroid StudioとXCodeが必要です。
  • あなたはMacを持っていないとiOS用に開発することはできません
  • テストに使用するには、デバイスをUSB経由で接続する必要があります
  • フォントはXCodeに手動でインポートする必要があります
  • アプリを共有したい場合は、.apk/.ipaファイル全体を送信する必要があります。
  • そのままではJS APIを提供しません。プッシュ通知、Asset Manager、手動でインストールしてnpmにリンクする必要があります。
  • 作業中のプロジェクトを適切に設定する(デバイス構成を含む)のはかなり複雑で、時間がかかる場合があります。

万博

利点

  • プロジェクトの設定は簡単で、数分で完了できます
  • 作業中にあなた(および他の人々)がプロジェクトを開くことができます
  • アプリの共有は(QRコードまたはリンクを介して)簡単です、あなたは全体の.apkまたは.ipaファイルを送る必要はありません。
  • アプリを実行するのにビルドは必要ありません
  • いくつかの基本的なライブラリを標準プロジェクト(Push Notifications、Asset Managerなど)に統合します。
  • あなたはそれをExpoKitに取り出すことができ、Expoの機能のいくつかを使い続けながらネイティブコードを統合することができますが、それらのすべてではありません
  • Expoは.apkと.ipaファイルを構築することができます(Expoで可能な店舗への配布)

デメリット

  • ネイティブモジュールを追加することはできません(おそらく一部のゲームチェンジャー)
  • Objective-C/Javaではネイティブコードを使用するライブラリは使用できません
  • 標準のHello Worldアプリは約25MBの大きさです(統合ライブラリのため)
  • あなたが使用したい場合:FaceDetector、ARKit o支払いあなたはそれをExpoKitに取り出す必要があります
  • ExpoKitにそれを取り出すことは、Expoの機能とのトレードオフを持ちます。あなたはQRコードを介して共有することはできません
  • ExpoKitに取り出すときは、その時点でExpoKitでサポートされている反応ネイティブバージョンに制限されています。
  • ExpoKit(ネイティブモジュール使用)でのデバッグは、2つの言語と異なるライブラリが混在しているため、はるかに複雑です(Expoの公式サポートはもう行われていません)。

私は私が最も重要な点をまとめることができると思います。さらにポイントを追加してください。

出典: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661https://github.com/react -community/create-react-native-app/issues/516#issuecomment-373629114https://docs.expo.io/versions/latest/guides/detach.html (公式文書一般に)

42
Benjamin Heinke

これはExpoの公式文書で説明されています

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

Expoは、Rails for React Nativeのようなものです。たくさんのことがあなたのために用意されているので、始めるのが早く、正しい道を進んでいます。

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ログイン

自分で正しく設定するには長い時間がかかることがありますが、Expoでは10分以内に機能するはずです。

インスタントアップデート

XDEで公開をクリックするだけで、すべてのExpoアプリを数秒で更新できます。何も設定する必要はありません。それはちょうどこのように機能します。 Expoを使用していない場合は、Microsoft Code Pushを使用するか、この問題に対して独自の解決策を実行してください。

資産管理

画像、ビデオ、フォントなどはすべてExpoを使ってインターネット上で動的に配信されます。これは、それらが即時更新で機能し、その場で変更できることを意味します。 Expoに組み込まれている資産管理システムは、リポジトリ内のすべての資産をCDNにアップロードして、誰にでもすばやくロードできるようにします。

Expoがなければ、通常行うべきことはアセットをアプリにバンドルすることです。つまり、アセットを変更することはできません。あるいは、自分の資産をCDNなどに自分で管理する必要があります。

新しいReactネイティブリリースへのより簡単なアップデート

私たちは数週間ごとにExpoの新しいリリースを行います。アプリのバイナリを再構築することを心配せずに、必要に応じて古いバージョンのReact Nativeをそのまま使用することも、新しいバージョンにアップグレードすることもできます。あなたは自分の時間でJavaScriptをアップグレードすることについて心配することができます。

しかしネイティブモジュールはありません…

Expoに関して最も制限のあることは、ExpoKitを切り離して使用することなしに、あなた自身のネイティブモジュールを追加することができないということです。

13
gumkins

Brent Vatneの答えは大丈夫ですが、詳細をいくつか追加します。


ExpoはReact NativeのAPIサーフェイスを拡張します

React Nativeは、箱から出してすぐに必要なJS APIをすべて提供するのではなく、最も基本的な機能だけを提供します。ネイティブネイティブの開発者は、追加のネイティブライブラリをリンクするためにAndroid Studio/XCodeを使用することが期待されています。 ExpoはRNを強化し、最も一般的なニーズに必要なすべてのJS APIを提供することを目的としています。それは基本的に、単一のlib:ExpoKitにすでにパッケージ化されている明確に定義された高品質のネイティブlibの集まりです。時々、これらのライブラリは実際にはすでにRNの世界に存在し、ExpoKitに統合されています。

使用されない多くのAPIが出荷されるため、hello worldアプリのサイズが大きくなるため、ExpoチームがすべてのライブラリをExpoKitに含めることができない(フラストレーションが生じる可能性がある)ことに注意することも重要です。ほとんどのアプリで。

エキスポが無線JSアップデートを提供

他のシステム(CodePush ...)と同様に、Expoはあなたのアプリを無線でアップデートするシステムを提供します。つまり、あなたのJSバンドルをCDNにアップロードすれば、モバイルアプリは次回の起動時に自動的に新しいJSをダウンロードして使用することになります(店に出版/レビューを要求することなく)。

Expoは彼らのCDNでJSバンドルをアップロード/管理するためのCLIツールを提供します。開発のためには、CDNになり、localhostでJSバンドルをホストすることも選択できます。そしてXDEはCLIの単なる視覚的なラッパーです。

万博は一般的なクライアントを提供します

Expoクライアントは、Expoと互換性のあるアプリをロードすることを許可する一般的なクライアントです。すべてのExpoアプリはまったく同じネイティブランタイム(RN + ExpoKit)を共有しています。唯一の違いはそれらが提供するJSです。 App Storeに公開したExpoアプリには、JSバンドルのURLがハードコードされています。 Expoクライアントは特定の方法で構築されているので、QRCodeをスキャンするかURLを指定することで、どのURLからJSをロードするかを選択できます。

このクライアントはlocalhostからJSバンドルをロードして開発を容易にすることもできます。XCodeやAndroid Studioは不要で、最初のHello Worldを電話で実行するのがはるかに速くなります(数時間から数分)。あなたは実際にはMacなしでiPhone上で開発することができ、セットアップは2分かかります。

Expo SDKはアップグレードできるので、Expoクライアントには互換性レイヤーが含まれているので、最新の5つのSDKバージョンを実行することができます。

エキスポがビルドサービスを提供

すべてのExpoアプリは同じネイティブコードを共有しているので、Expoはこれらのアプリを簡単に構築することができます。彼らはクラウド構築サービスを作成しました。

Expoによって構築されたDifferential 2アプリケーションは、アプリケーションが実行するためにJSバンドルをダウンロードすることが想定されているハードコードされたURLです

Expoは、アプリのアイコン、向き、アクセス許可、APIキーをセットアップするための宣言的な方法の提供、プッシュ通知、プロビジョニングプロファイルのセットアップを支援するなど、他のことを行います。多くの設定はアプリのビルド時にハードコーディングする必要があります。無線で変更することはできません。

エキスポはPhonegapがコルドバにあるものをネイティブに反応させることです

React NativeはCordovaに似ています。これは同じビューテクノロジではありませんが(ネイティブ対Webビュー)、どちらもJavaScriptからネイティブ機能を制御でき、開発者が新しいJS /ネイティブバインディングを簡単に追加できるように、どちらもプラグインシステムを提供します。

PhoneGapはExpoに似ています。どちらも、事前定義された追加のネイティブプラグインのセットを使用して、それらが構築されている基盤となるプラットフォームの生のAPIを強化しようとします。 PhoneGapは build servicegeneric client を提供しています。これらは承認されたプラグインを使用している限り動作します。

結論

ご覧のとおり、万博は道具としてのセットです。最後にそれはあなたのモバイルプロジェクトを簡単に開発し、共有し、そして店舗に公開することを可能にする。これはPhoneGapのエクスペリエンスと非常によく似ています(ただし、はるかに優れていて混乱が少ないです)。

私は、以下の2つの場合を除いて、新しいReact Nativeのグリーンフィールドプロジェクトには必ずExpoをお勧めします。

  • あなたはすでにExpoで利用できないAPIが必要であることを知っています
  • あなたはあなたのアプリのサイズを大事にしています(HelloWorldはExpoKitのサイズが大きいために25MB以上ですが、それ以降は単なるJSなのでそれほど増えません)。
11

Expoとreact-native-cliの長所と短所に関する答えは完全です。私の個人的な経験として別のポイントに言及したいと思います。 Expoにはプロジェクトのデフォルトで多くのモジュールが含まれており、作業が簡単になります。しかし、ビルドされたAndroidiosのバージョンは非常に大きいため、生産段階で大きな問題があります。たとえば、'Hello World'を持つ単一のページがある場合、apkファイルサイズは約19 MBになります。 react-native-cliに同じプロジェクトがあると、サイズが6 MBのアプリになります。

ですから、個人的には、商用アプリを開発したい場合、expoの使用はお勧めしません。

3
meisam nazari

エキスポCLI賛成論: - 1。モバイルアプリの構築を開始するためのAndroidスタジオとXcodeをインストールする必要はありません。開発のための高い構成機械の必要条件がない。 3.モバイルUIは、バーコードscanning.andを使用して、AndroidとiPhoneの両方のデバイスを簡単にチェックできます。また、いつでもオンラインのiPhoneとAndroidのシミュレータをチェックできます。速い開発。短所: - 1。ネイティブの依存関係は、博覧会のプロジェクトは、IOSとAndroidのフォルダを持っていないので博覧会に追加することはできませんので、ここで博覧会は制限されています。 APKとIPAを作ることは博覧会を使用することは困難です。 React Native Cli

長所: - 1.このプロジェクト構造にはiOSとAndroidフォルダーがあるため、AndroidとiOSのネイティブ依存関係を簡単に追加できます。 2. APKとIPAのビルドはエキスポよりも簡単です。注:: - React Native cliは、反応ネイティブフレームワークで作業を開始するための正しいアプローチです。短所: - 1.高度な設定マシンが必要です。 iosフォルダ構造ですが、これからもっと学ぶことができます。

あなたはあなたの要求に応じてどんなアプローチを選ぶこともできます。

2
Atul Tiwari

私はここでExpoがreact 16.5の古いバージョンを使用していることに注意してください。あなたがExpoと一緒に行くことにした場合、あなたのバージョン管理を見ることに注意してください。あなたが奇妙なエラーを得ているならばsay反応ナビゲーションのより古いバージョンは16.5バージョンで使用される必要があるでしょう。

0
SMW