Was ist der Unterschied zwischen Expo und React Native?

Antworten:

206

Ich arbeite auf der Expo!

Wenn Sie Code Exposchreiben, schreiben Sie React NativeCode. Expohat zwei Hauptstücke:

1) expo-cli: Ein Entwicklertool zum Erstellen von Projekten, Anzeigen von Protokollen, Öffnen auf Ihrem Gerät, Veröffentlichen usw.

2) Der ExpoClient: Eine App auf Ihrem Telefon, mit der Sie Ihre Projekte öffnen können, während Sie daran arbeiten, ohne XCodeoder durchlaufen zu müssen Android Studio, und mit der andere Personen sie auch anzeigen können! Wenn Sie es über veröffentlichen expo-cli, können ExpoBenutzer jederzeit über den Client auf Android oder iOS darauf zugreifen, wenn Sie sich bei demselben Konto angemeldet haben, mit dem es veröffentlicht wurde. Schließlich ermöglichen wir auch das Erstellen eigenständiger Apps, damit die ExpoBenutzer den Client nicht zum Öffnen verwenden müssen, und Sie können ihn an den App Store und den Play Store verteilen, wenn Sie möchten.

Es handelt sich also Expoum eine Reihe von Tools, die auf / um aufgebaut sind React Native. Diese Tools hängen von einer zentralen Überzeugung ab, an der wir festhalten Expo: Es ist möglich, die meisten Apps zu erstellen, ohne jemals nativen Code schreiben zu müssen, vorausgesetzt, Sie verfügen über einen umfassenden Satz von APIs, denen Sie ausgesetzt sind Javascript.

Dies ist wichtig, da React NativeSie mit immer auf nativen Code zurückgreifen können. Dies ist manchmal unglaublich hilfreich, hat aber auch Kosten: Sie müssen den Leuten Ihre Binärdateien senden, wenn sie sie testen sollen. Jemand auf der anderen Seite der Welt kann nicht einfach auf einen Link tippen, um ihn während der Arbeit zu öffnen Sie können es nicht einfach mit einem Klick veröffentlichen, damit jemand darauf zugreifen kann, ähnlich wie in einem Browser.

Mit Expoempfehlen wir, dass Sie versuchen, nicht auf nativen Code zurückzugreifen, wenn Sie können. Wie ich oben erwähnt habe, denken wir, dass mit einem umfassenden Satz von APIs zur VerfügungJavascript für die meisten Apps nicht erforderlich. Daher möchten wir diesen umfassenden Satz von APIs bereitstellen und dann alle fantastischen Tools erstellen, die in einer Welt existieren können, in der die native Laufzeit gemeinsam genutzt wird.

Wenn Sie jedoch feststellen müssen, dass Sie unbedingt auf native zurückgreifen, können Sie ExpoKitdie nativen APIs weiterhin verwenden, Expodie Ihnen bei gleicher Kontrolle wie in jedem nativen Projekt zur Verfügung stehen. " ExpoKitist eine Objective-C- und Java-Bibliothek, mit der Sie die ExpoPlattform und Ihr vorhandenes ExpoProjekt als Teil eines größeren nativen Standardprojekts verwenden können." Lesen Sie hier mehr.

brentvatne
quelle
4
"Mit Exponent können Sie nicht auf nativen Code zurückgreifen". Es ist schön zu wissen, dass Sie nicht auf nativen Code zurückgreifen MÜSSEN, aber was ist, wenn nötig, warum sollte Exponent Sie daran hindern?
Otto
3
Ah, ich kann sehen, wie unklar das war. Der Exponent-Client ist also vollständig Open Source ( github.com/exponentjs/exponent ), was bedeutet, dass Sie nativen Code schreiben können, wenn Sie möchten, aber dann behandeln Sie die Exponent-Bibliotheken effektiv nur als eine Sammlung nativer Module in einem ansonsten typischen React Native App. Dies ist völlig in Ordnung und hat uns motiviert, das Projekt als Open Source zu nutzen. Wenn Sie jedoch unser Tool verwenden möchten (App Binary Builder, Exponent-Client im App / Play Store, um Testbuilds, integrierte Push-Benachrichtigungen usw. freizugeben), können Sie keinen nativen Code schreiben.
Brentvatne
Zum Zeitpunkt des Schreibens war Expo ziemlich gut darin, nützliche native Plugins zu integrieren. Es fehlt ihnen jedoch eine MAJOR-Plugin-Integration für IAP, und ohne diese können Sie mit Ihrer App kein Geld verdienen !!! Und du fragst, was bringt es, eine App zu machen, wenn ich keinen Gewinn machen kann !!
Adam
95

Ich habe versucht, eine Zusammenfassung der Dokumentation und Antworten der Expo-Mitarbeiter zu erstellen:

Native Init reagieren:

Vorteile :

  • Sie können native Module hinzufügen, die in Java / Objective-C geschrieben sind (wahrscheinlich das einzige, aber das stärkste).

Nachteile :

  • Benötigt Android Studio und XCode, um die Projekte auszuführen
  • Sie können nicht für iOS entwickeln, ohne einen Mac zu haben
  • Das Gerät muss über USB angeschlossen sein, um es zum Testen verwenden zu können
  • Schriftarten müssen manuell in XCode importiert werden
  • Wenn Sie die App freigeben möchten, müssen Sie die gesamte APK / IPA-Datei senden
  • Bietet keine sofort einsatzbereiten JS-APIs, z. B. Push-Benachrichtigungen, Asset Manager. Sie müssen beispielsweise manuell installiert und mit npm verknüpft werden
  • Das ordnungsgemäße Einrichten eines Arbeitsprojekts (einschließlich Gerätekonfiguration) ist ziemlich kompliziert und kann einige Zeit dauern

Messe

Vorteile :

  • Das Einrichten eines Projekts ist einfach und in wenigen Minuten erledigt
  • Sie (und andere Personen) können das Projekt öffnen, während Sie daran arbeiten
  • Das Teilen der App ist einfach (über QR-Code oder Link), Sie müssen nicht die gesamte APK- oder IPA-Datei senden
  • Kein Build erforderlich, um die App auszuführen
  • Integriert einige Basisbibliotheken in ein Standardprojekt (Push-Benachrichtigungen, Asset Manager, ...)
  • Sie können es in ExpoKit auswerfen und nativen Code integrieren, indem Sie einige der Expo-Funktionen verwenden, jedoch nicht alle
  • Expo kann APK- und IPA-Dateien erstellen (Verteilung an Geschäfte mit Expo möglich)

Nachteile :

  • Sie können keine nativen Module hinzufügen (wahrscheinlich ein Gamechanger für einige)
  • Sie können keine Bibliotheken verwenden, die nativen Code in Objective-C / Java verwenden
  • Die Standard-Hello World-App ist ungefähr 25 MB groß (aufgrund der integrierten Bibliotheken).
  • Wenn Sie Folgendes verwenden möchten: FaceDetector, ARKit oder Payments, müssen Sie es in ExpoKit auswerfen
  • Das Auswerfen auf ExpoKit hat einen Kompromiss zwischen den Funktionen von Expo, z. B. können Sie nicht über QR-Code teilen
  • Beim Auswerfen auf ExpoKit sind Sie auf die native native Reaktionsversion beschränkt, die zu diesem Zeitpunkt von ExpoKit unterstützt wird
  • Das Debuggen in ExpoKit (mit nativen Modulen) ist viel komplizierter, da es zwei Sprachen und verschiedene Bibliotheken mischt (keine offizielle Expo-Unterstützung mehr).

Ich hoffe, ich konnte die wichtigsten Punkte zusammenfassen. Bitte zögern Sie nicht, zusätzliche Punkte hinzuzufügen.

Quellen: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ Issues / 516 # issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html (offizielle Dokumentation im Allgemeinen)

Benjamin Heinke
quelle
1
Ein weiterer großer Nachteil der Verwendung von expo ist die Größe der App. Die Mindestgröße beträgt ~ 25 MB für iOS-Apps und ~ 20 MB für Android-Apps
Pratik Singhal
3
Dies wird bereits als Nachteil eines Expo-Projekts erwähnt: "Die Standard-Hello World-App ist ungefähr 25 MB groß (wegen der integrierten Bibliotheken)"
Benjamin Heinke
1
Vielen Dank an @BenjaminHeinke für ein klares Bild der Vor- und Nachteile. Ich habe bereits den Nachteil Nr. 2 mit unserer Entscheidung, eine Ausstellung für eine reaktionsfähige native App zu übernehmen. Aus diesem Grund können wir uns nicht in Appsee integrieren. Gibt es dafür keine Problemumgehung?
CoolDocMan
1
Das Gerät muss für Tests nicht an USB angeschlossen sein, nur die erste Kompilierung und Installation muss über USB erfolgen. Später können Sie Wi-Fi nutzen! Benötigt eine Neukompilierung, wenn Sie Änderungen an native vornehmen.
Rszalski
28

Die Antwort von Brent Vatne ist in Ordnung, aber ich möchte einige Details hinzufügen.


Expo erweitert die API-Oberfläche von React Native

React Native bietet Ihnen nicht alle JS-APIs, die Sie sofort benötigen, sondern nur die primitivsten Funktionen. Von nativen Entwicklern wird erwartet, dass sie Android Studio / XCode verwenden, um zusätzliche native Bibliotheken zu verknüpfen. Expo zielt darauf ab, RN zu verbessern und alle JS-APIs bereitzustellen, die Sie für die häufigsten Anforderungen benötigen. Es handelt sich im Grunde genommen um eine Reihe gut definierter nativer Qualitätsbibliotheken, die bereits in einer einzigen Bibliothek für Sie verpackt sind: ExpoKit. Manchmal sind diese Bibliotheken tatsächlich bereits in der RN-Welt vorhanden und in ExpoKit integriert.

Es ist auch wichtig zu beachten, dass das Expo-Team nicht jede Bibliothek in ExpoKit aufnehmen kann (was zu Frustrationen führen kann), da die Größe der Hallo-Welt-App zunehmen würde, da viele APIs ausgeliefert würden, die nicht verwendet würden in den meisten Apps.

Die Expo bietet drahtlose JS-Updates

Wie andere Systeme (CodePush ...) bietet Expo ein System, mit dem Sie Ihre App drahtlos aktualisieren können. Dies bedeutet, dass Sie Ihr JS-Bundle auf ein CDN hochladen und die mobilen Apps das neue JS beim nächsten Start automatisch herunterladen und verwenden (ohne eine Veröffentlichung / Überprüfung in den Stores anzufordern).

Expo bietet ein CLI-Tool zum Hochladen / Verwalten der JS-Bundles auf ihrem CDN. Für die Entwicklung können Sie auch CDN werden und das JS-Bundle auf localhost hosten. Und XDE ist nur ein visueller Wrapper auf der CLI.

Expo bietet einen generischen Client

Der Expo-Client ist ein generischer Client, mit dem jede mit Expo kompatible App geladen werden kann. Alle Expo-Apps haben genau dieselbe native Laufzeit (RN + ExpoKit). Der einzige Unterschied besteht in der JS, die wir ihnen geben. In den Expo-Apps, die Sie in den App Stores veröffentlichen, ist Ihre JS-Bundle-URL fest codiert. Der Expo-Client wird auf eine bestimmte Weise erstellt, sodass Sie auswählen können, aus welcher URL der JS geladen werden soll, indem Sie einen QRCode scannen oder eine URL angeben.

Beachten Sie, dass dieser Client auch JS-Bundles von localhost laden und Ihre Entwicklungserfahrung vereinfachen kann: XCode oder Android Studio sind nicht erforderlich, und es wird viel schneller, Ihre erste Hello World auf dem Telefon zum Laufen zu bringen (von Stunden bis Minuten). Sie können tatsächlich auf einem iPhone ohne Mac entwickeln und die Einrichtung dauert 2 Minuten.

Da das Expo SDK aktualisiert werden kann, enthält der Expo-Client eine Kompatibilitätsschicht, sodass die letzten 5 SDK-Versionen ausgeführt werden können.

Expo bietet einen Build-Service

Da alle Expo-Apps denselben nativen Code verwenden, kann Expo diese Apps problemlos für Sie erstellen. Sie haben einen Cloud-Build-Service erstellt.

Das Wichtigste, was 2 von Expo erstellte Apps unterscheidet, ist nur die fest codierte URL, auf die die App das JS-Bundle herunterladen soll, um es auszuführen.

Expo erledigt einige andere Dinge für Sie, z. B. die Bereitstellung einer deklarativen Möglichkeit zum Einrichten von App-Symbolen, Ausrichtungen, Berechtigungen und API-Schlüsseln, das Einrichten von Push-Benachrichtigungen, das Bereitstellen von Profilen ... Viele Einstellungen müssen zum Zeitpunkt der Erstellung in der App fest codiert werden und können nicht über Funk gewechselt werden.

Expo soll Native reagieren, was Phonegap für Cordova ist

React Native ist ähnlich wie Cordova. Es ist nicht dieselbe Ansichtstechnologie (native oder Webansicht), aber beide ermöglichen es Ihnen, native Funktionen über Javascript zu steuern, und beide bieten ein Plugin-System, mit dem Entwickler problemlos neue JS / native Bindungen hinzufügen können.

PhoneGap ähnelt der Expo. Beide versuchen, die Roh-API der zugrunde liegenden Plattform, auf der sie basieren, mit einem vordefinierten Satz zusätzlicher nativer Plugins anzureichern. PhoneGap bietet auch einen Build-Service und verfügt über einen generischen Client , der funktioniert, solange Sie die genehmigten Plugins verwenden.

Fazit

Wie Sie sehen können, ist Expo eine Reihe von Werkzeugen. Am Ende können Sie Ihre mobilen Projekte einfach entwickeln, freigeben und in den Filialen veröffentlichen. Es ist dem PhoneGap-Erlebnis ziemlich ähnlich (aber viel besser und weniger verwirrend).

Ich werde Expo definitiv für jedes neue Greenfield-Projekt von React Native empfehlen, mit Ausnahme dieser beiden Fälle:

  • Sie wissen bereits, dass Sie APIs benötigen, die in Expo nicht verfügbar sind und nicht in Kürze verfügbar sein werden
  • Ihre App-Größe ist Ihnen sehr wichtig (HelloWorld ist aufgrund der großen Größe von ExpoKit> 25 MB groß, nimmt danach jedoch nicht viel zu, da es sich nur um JS handelt.)
Sebastien Lorber
quelle
1
Ich versuche eine Liste der APIs zu finden, die Expo nicht unterstützt. Weiß jemand wo man das findet?
Ronnyrr
@ronnyrr Expo unterstützt nicht alles, was nicht JS ist und was nicht in Raw RN und ExpoKit enthalten ist. Es gibt eine unendliche Liste von Dingen, die Expo nicht unterstützt, weil alles andere nicht in der endlichen Liste der Funktionen enthalten ist, die Expo unterstützt. Was Sie verlangen, kann nicht existieren.
Sebastien Lorber
2
@ronnyrr Ich denke, das ist, was Sie suchen: expo.canny.io Es ist eine Liste von Feature-Anfragen, die Sie nach Beliebtheit sortieren können
Evan Bacon
26

Dies wird in der offiziellen Expo-Dokumentation erläutert

Was ist der Unterschied zwischen Expo und React Native?

Die Expo ähnelt Rails for React Native. Viele Dinge sind für Sie eingerichtet, so dass Sie schneller loslegen und auf dem richtigen Weg sind.

Mit Expo benötigen Sie weder Xcode noch Android Studio. Sie schreiben JavaScript einfach mit einem beliebigen Texteditor (Atom, Vim, Emacs, Sublime, VS Code, was auch immer Sie möchten). Sie können XDE (unsere Desktop-Software) unter Mac, Windows und Linux ausführen.

Hier sind einige der Dinge, die Ihnen die Expo sofort bietet und die sofort funktionieren:

Unterstützung für iOS und Android

Sie können Apps, die in Expo geschrieben wurden, sofort auf iOS und Android verwenden. Sie müssen nicht für jeden einen eigenen Erstellungsprozess durchlaufen. Öffnen Sie einfach eine Expo-App in der Expo Client-App aus dem App Store auf iOS oder Android (oder in einem Simulator oder Emulator auf Ihrem Computer).

Mitteilungen

Push-Benachrichtigungen funktionieren sofort unter iOS und Android mit einer einzigen, einheitlichen API. Sie müssen weder APNS noch GCM / FCM einrichten oder ZeroPush oder ähnliches konfigurieren. Wir denken, wir haben dies so einfach wie möglich gemacht.

Facebook Login

Es kann lange dauern, bis Sie sich richtig eingerichtet haben, aber Sie sollten in der Lage sein, es auf der Expo in maximal 10 Minuten zum Laufen zu bringen.

Sofortige Aktualisierung

Alle Expo-Apps können in Sekundenschnelle aktualisiert werden, indem Sie einfach auf In XDE veröffentlichen klicken. Sie müssen nichts einrichten; es funktioniert einfach so. Wenn Sie Expo nicht verwenden, verwenden Sie entweder Microsoft Code Push oder erstellen eine eigene Lösung für dieses Problem

Anlagenmanagement

Bilder, Videos, Schriftarten usw. werden mit Expo dynamisch über das Internet verteilt. Dies bedeutet, dass sie mit sofortiger Aktualisierung arbeiten und im laufenden Betrieb geändert werden können. Das in Expo integrierte Asset-Management-System sorgt dafür, dass alle Assets in Ihrem Repo auf ein CDN hochgeladen werden, damit sie für jeden schnell geladen werden können.

Ohne Expo ist es normal, Ihre Assets in Ihrer App zu bündeln, was bedeutet, dass Sie sie nicht ändern können. Oder Sie müssen Ihr Vermögen selbst auf ein CDN oder ähnliches stellen.

Einfachere Aktualisierung auf neue native React-Versionen

Wir machen alle paar Wochen Neuerscheinungen der Expo. Sie können auf einer alten Version von React Native bleiben, wenn Sie möchten, oder auf eine neue aktualisieren, ohne sich Gedanken über die Neuerstellung Ihrer App-Binärdatei machen zu müssen. Sie können sich in Ihrer Freizeit Gedanken über ein Upgrade des JavaScript machen.

Aber keine nativen Module ...

Das Beste an Expo ist, dass Sie keine eigenen nativen Module hinzufügen können, ohne ExpoKit zu trennen und zu verwenden.

Gummis
quelle
2
Ich verwende Expo in Windows 8. Wie erstelle ich QR-Code, damit ich meine App direkt auf meinem Gerät ausführen kann?
Prasanna
1
Ich habe es unter Windows nicht ausprobiert, aber ich denke, es muss auf jedem System ähnlich sein. QR-Code wird automatisch entweder in der Expo XDEKonsole oder in der exp startKonsolenbefehlsausgabe generiert .
Gummis
1
$ prasanna Manchmal wird kein QR-Code angezeigt, weil sich Ihr Telefon und Ihr Entwicklungscomputer nicht im selben Netzwerk befinden. Wenn Sie beispielsweise zu Hause arbeiten, stellen Sie sicher, dass sich Ihr Telefon in Ihrem Heimnetzwerk befindet. Und etc ...
ccalvert
7

EXPO CLI

Profis: -

 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.

Nachteile: -

 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

Reagiere auf Native Cli

Vorteile: -

 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.

Nachteile: -

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.

Sie können jeden Ansatz nach Ihren Wünschen bevorzugen.

Atul Tiwari
quelle
2

Ich möchte hier darauf hinweisen, dass Expo eine ältere Version von React 16.5 verwendet, die Ihnen die Verwendung der neuen Hooks-Funktion untersagt. Wenn Sie sich für Expo entscheiden, achten Sie auf Ihre Versionskontrollen. Ältere Versionen von say react-navigation müssen mit der 16.5-Version verwendet werden, wenn seltsame Fehler auftreten.

SMW
quelle
expo updatemacht einen ziemlich guten Job, um die kompatiblen Versionen für die meisten von Expo verwalteten Pakete zu erhalten. Ich glaube nicht, dass React Navigation derzeit aktualisiert wird, aber diese Bibliothek wird tatsächlich von Expo gesponsert. Persönlich stoße ich selten auf Kompatibilitätsprobleme zwischen React Navigation und Expo (ich glaube, ich habe bei der Verwendung von Beta-Versionen einige Probleme festgestellt). Möglicherweise treten jedoch weitere Kompatibilitätsprobleme mit Paketen auf, die nicht von Expo verwaltet werden.
Christian Juth
2

Die Antworten zu den Vor- und Nachteilen von expo und react-native-cli sind vollständig. Ich möchte einen anderen Punkt als meine persönliche Erfahrung erwähnen. Die Expo enthält standardmäßig viele Module im Projekt und erleichtert die Arbeit damit. Aber es hat ein großes Problem in der Produktionsphase, weil die gebauten androidund iosVersionen eine so große Größe haben. Zum Beispiel , wenn Sie eine Seite mit einer 'Hello World'der apkDateigröße sein etwa würde 19 MB. Wenn Sie dasselbe Projekt in react-native-cli haben, erhalten Sie eine App mit der Größe6 MB .

Ich persönlich empfehle daher nicht, expo zu verwenden, wenn Sie eine kommerzielle App entwickeln möchten.

Meisam Nazari
quelle
Ich denke nicht, dass dies ein guter Grund dafür ist, dass Expo-Apps nicht produktionsbereit sind. Außerdem wurde dies durch frühere Antworten gründlich erklärt
Dawoodjee
1

Ich habe mehr als ein Jahr Erfahrung mit Expo. Wenn die Größe der App für Sie nicht wichtig ist, verwenden Sie Expo, da es einfach ist, Map, Push einfacher als React-native zu implementieren, aber am Ende des Projekts, wenn Sie veröffentlichen möchten App in Google Play oder einem anderen Store Sie haben die Herausforderung, eine Berechtigung in Ihrem APK React-native zu entfernen. Sie können alles ändern, aber für den Import einer Bibliothek wie Push-Benachrichtigung oder der Karte sind auch einige Herausforderungen erforderlich, da Sie diese Bibliotheken manuell hinzufügen müssen Android- und iOS-Projekte

Amir Ardalan
quelle
-1

expo ist eine Toolchain, die auf React Native basiert und Ihnen hilft, eine App schnell zu starten. Es bietet eine Reihe von Tools, die die Entwicklung und das Testen der React Native-App sowie der Benutzeroberfläche und der Dienste vereinfachen, die normalerweise in nativen React Native-Komponenten von Drittanbietern verfügbar sind. Mit Expo finden Sie alle im Expo SDK.

Shivo'ham 0
quelle