Quelle est la différence entre Expo et React Native?

Réponses:

206

Je travaille à Expo!

Lorsque vous écrivez du code, Expovous écrivez du React Nativecode. Expoa deux pièces principales:

1) expo-cli: un outil de développement pour créer des projets, consulter les journaux, ouvrir sur votre appareil, publier, etc.

2) Le Expoclient: une application sur votre téléphone qui vous permet d'ouvrir vos projets pendant que vous travaillez dessus, sans avoir à passer par XCodeou Android Studio, et permet également à d'autres de les voir! Et si vous le publiez via expo-cli, les gens peuvent y accéder à tout moment via le Expoclient sur Android ou sur iOS s'ils sont connectés au même compte avec lequel ils ont été publiés. Enfin, nous permettons également de créer des applications autonomes afin que les gens n'aient pas à utiliser le Expoclient pour l'ouvrir, et vous pouvez distribuer sur l'App Store et Play Store si vous le souhaitez.

Il Expos'agit donc d'un ensemble d'outils construits sur / autour React Native. Ces outils dépendent d'une croyance clé que nous détenons Expo: il est possible de créer la plupart des applications sans jamais avoir besoin d'écrire du code natif, à condition que vous disposiez d'un ensemble complet d'API exposées Javascript.

Ceci est important car avec React Nativevous, vous pouvez toujours passer au code natif. C'est incroyablement utile parfois, mais cela a un coût: vous devez envoyer à vos personnes vos binaires si vous voulez qu'ils les testent, quelqu'un à l'autre bout du monde ne peut pas simplement appuyer sur un lien pour l'ouvrir pendant que vous travaillez dessus et vous ne pouvez pas simplement le publier en un seul clic pour que quelqu'un y accède de la même manière que vous le feriez dans un navigateur.

Avec Expo, nous vous suggérons d'essayer d'éviter de passer au code natif, si vous le pouvez. Comme je l'ai mentionné ci-dessus, nous pensons qu'avec un ensemble complet d'API disponibles Javascript, cela ne devrait pas être nécessaire pour la plupart des applications. Nous visons donc à fournir cet ensemble complet d'API, puis à construire tous les outils impressionnants qui peuvent exister dans un monde où le runtime natif est partagé.

Cependant, si vous devez trouver que vous descendez absolument en natif, vous pouvez ExpoKitcontinuer à utiliser les API natives qui Expovous donnent tout en ayant le même niveau de contrôle que dans tout projet natif. " ExpoKitest une bibliothèque Objective-C et Java qui vous permet d'utiliser la Expoplate - forme et votre Expoprojet existant dans le cadre d'un projet natif standard plus vaste." En savoir plus ici.

brentvatne
la source
4
"Avec Exponent, vous ne pouvez pas passer au code natif". Il est bon de savoir que vous n'avez PAS à passer au code natif, mais qu'en est-il si vous en avez besoin, pourquoi Exponent vous empêcherait-il de le faire?
Otto
3
Ah je peux voir comment cela n'était pas clair. Le client Exponent est donc complètement open source ( github.com/exponentjs/exponent ), ce qui signifie que vous pouvez écrire du code natif si vous le souhaitez, mais vous traitez simplement les bibliothèques Exponent comme une collection de modules natifs dans un React Native typique. app. C'est tout à fait correct et cela nous a motivés à ouvrir le projet. Cela dit, si vous voulez pouvoir utiliser nos outils (générateur binaire d'application, client exposant sur l'app / play store pour partager des versions de test, des notifications push intégrées, etc.), vous ne pouvez pas écrire de code natif.
brentvatne
au moment de la rédaction de ce document, Expo est devenu assez bon avec l'intégration de plugins natifs utiles. Cependant, ils manquent d'une intégration de plugin MAJEUR pour IAP et sans elle, vous ne pouvez pas gagner de l'argent avec votre application !!! Et vous demandez quel est l'intérêt de faire une application si je ne peux pas faire de profit !!
Adam
96

J'ai essayé de faire un résumé de la documentation et des réponses des employés de l'Expo:

React Native init:

Avantages :

  • Vous pouvez ajouter des modules natifs écrits en Java / Objective-C (probablement le seul mais le plus fort)

Inconvénients :

  • Nécessite Android Studio et XCode pour exécuter les projets
  • Vous ne pouvez pas développer pour iOS sans avoir un mac
  • L'appareil doit être connecté via USB pour l'utiliser pour les tests
  • Les polices doivent être importées manuellement dans XCode
  • Si vous souhaitez partager l'application, vous devez envoyer l'intégralité du fichier .apk / .ipa
  • Ne fournit pas d'API JS prêtes à l'emploi, par exemple Push-Notifications, Asset Manager, elles doivent être installées manuellement et liées avec npm par exemple
  • Mettre en place un projet de travail correctement (y compris la configuration de l'appareil) est assez compliqué et peut prendre du temps

Expo

Avantages :

  • La mise en place d'un projet est facile et peut se faire en quelques minutes
  • Vous (et d'autres personnes) pouvez ouvrir le projet pendant que vous y travaillez
  • Le partage de l'application est facile (via QR-code ou lien), vous n'avez pas à envoyer l'intégralité du fichier .apk ou .ipa
  • Aucune construction nécessaire pour exécuter l'application
  • Intègre quelques bibliothèques de base dans un projet standard (Push Notifications, Asset Manager, ...)
  • Vous pouvez l'éjecter vers ExpoKit et intégrer du code natif en continuant à utiliser certaines des fonctionnalités d'Expo, mais pas toutes
  • Expo peut créer des fichiers .apk et .ipa (distribution aux magasins possible avec Expo)

Inconvénients :

  • Vous ne pouvez pas ajouter de modules natifs (probablement un gamechanger pour certains)
  • Vous ne pouvez pas utiliser des bibliothèques qui utilisent du code natif dans Objective-C / Java
  • L'application Hello World standard mesure environ 25 Mo (en raison des bibliothèques intégrées)
  • Si vous souhaitez utiliser: FaceDetector, ARKit ou Payments, vous devez l'éjecter vers ExpoKit
  • L'éjecter dans ExpoKit a un compromis entre les fonctionnalités d'Expo, par exemple, vous ne pouvez pas partager via QR code
  • Lors de l'éjection vers ExpoKit, vous êtes limité à la version native de réactivité prise en charge par ExpoKit à ce moment-là
  • Le débogage dans ExpoKit (avec des modules natifs) est beaucoup plus compliqué, car il mélange deux langues et différentes bibliothèques (plus de support officiel d'Expo)

J'espère pouvoir résumer les points les plus importants. N'hésitez pas à ajouter des points supplémentaires.

Sources: 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 (documentation officielle en général)

Benjamin Heinke
la source
1
Un autre inconvénient majeur de l'utilisation d'Expo est la taille de l'application. La taille minimale est de ~ 25 Mo pour les applications iOS et de ~ 20 Mo pour les applications Android
Pratik Singhal
3
Ceci est déjà mentionné comme un inconvénient d'un projet d'expo: "L'application standard Hello World fait environ 25 Mo (à cause des bibliothèques intégrées)"
Benjamin Heinke
1
Merci @BenjaminHeinke pour une image claire des avantages et des inconvénients. Je connais déjà le désavantage n ° 2 avec notre décision d'adopter expo pour notre application native. Nous ne pouvons pas nous intégrer à Appsee pour cette raison. N'y a-t-il pas de solution pour cela?
CoolDocMan
1
L'appareil n'a pas besoin d'être connecté à l'USB pour les tests, seule la première compilation et l'installation doivent être effectuées via l'USB. Plus tard, vous pourrez utiliser le Wi-Fi! Aura cependant besoin d'une recompilation si vous apportez des modifications au mode natif.
rszalski
28

La réponse de Brent Vatne est très bien mais je voudrais ajouter quelques détails.


Expo étend la surface API de React Native

React Native ne vous fournit pas toutes les API JS dont vous avez besoin, mais uniquement les fonctionnalités les plus primitives. Les développeurs React Native devraient utiliser Android Studio / XCode pour lier des bibliothèques natives supplémentaires. Expo vise à améliorer RN et à fournir toutes les API JS dont vous avez besoin pour les besoins les plus courants. Il s'agit essentiellement d'un ensemble de bibliothèques natives de qualité bien définies déjà emballées pour vous dans une seule bibliothèque: ExpoKit. Parfois, ces bibliothèques existent déjà dans le monde RN et sont intégrées à ExpoKit.

Il est également important de noter que l'équipe d'Expo ne peut pas inclure chaque bibliothèque dans ExpoKit (ce qui peut créer une certaine frustration) car la taille de l'application Hello World augmenterait, car elle expédierait de nombreuses API qui ne seraient pas utilisées. dans la plupart des applications.

Expo fournit des mises à jour JS en direct

Comme d'autres systèmes (CodePush ...), Expo fournit un système pour mettre à jour votre application en direct. Cela signifie que vous téléchargez votre bundle JS sur un CDN et que les applications mobiles téléchargeront et utiliseront automatiquement le nouveau JS au prochain démarrage (sans demander de publication / révision dans les magasins).

Expo fournit un outil CLI pour télécharger / gérer les bundles JS sur leur CDN. Pour le développement, vous pouvez également choisir de devenir le CDN et d'héberger le bundle JS sur localhost. Et XDE est juste un wrapper visuel sur la CLI.

Expo fournit un client générique

Le client Expo est un client générique qui permet de charger n'importe quelle application compatible avec Expo. Toutes les applications Expo partagent le même runtime natif (RN + ExpoKit), la seule différence est le JS que nous leur donnons. Les applications Expo que vous publiez dans les magasins d'applications ont votre URL de bundle JS codée en dur. Le client Expo est construit d'une manière spécifique afin que vous puissiez choisir à partir de quelle URL charger le JS, en scannant un QRCode ou en fournissant une URL.

Notez que ce client peut également charger des bundles JS à partir de localhost, et rendre votre expérience de développement plus facile: pas besoin de XCode ou Android Studio, et il devient beaucoup plus rapide de faire fonctionner votre premier Hello World sur le téléphone (de quelques heures à quelques minutes). Vous pouvez réellement développer sur un iPhone sans Mac et la configuration prend 2 minutes.

En fait, comme l'Expo SDK peut être mis à niveau, le client Expo inclut une couche de compatibilité pour pouvoir exécuter les 5 dernières versions du SDK.

Expo fournit un service de construction

Comme toutes les applications Expo partagent le même code natif, Expo est en mesure de créer facilement ces applications pour vous. Ils ont créé un service de création de cloud.

La principale chose qui différencie 2 applications construites par Expo est simplement l'URL codée en dur sur laquelle l'application est censée télécharger le bundle JS pour fonctionner.

Expo fait d'autres choses pour vous, comme fournir un moyen déclaratif de configurer les icônes d'application, les orientations, les autorisations, les clés api, vous aider à configurer les notifications push, les profils d'approvisionnement ... de nombreux paramètres doivent être codés en dur au moment de la construction dans l'application et peuvent pas être changé sur l'air.

Expo est de réagir Native ce que Phonegap est à Cordoue

React Native est similaire à Cordova. Ce n'est pas la même technologie de vue (native vs webview) mais les deux vous permettent de contrôler les fonctionnalités natives à partir de javascript, et les deux offrent un système de plugins afin que les développeurs puissent facilement ajouter de nouvelles liaisons JS / natives.

PhoneGap est similaire à Expo. Ils essaient tous les deux d'enrichir l'API brute de la plate-forme sous-jacente sur laquelle ils sont construits avec un ensemble prédéfini de plugins natifs supplémentaires. PhoneGap propose également un service de build et dispose d'un client générique qui fonctionne tant que vous utilisez les plugins approuvés.

Conclusion

Comme vous pouvez le voir, Expo est un ensemble d'outils. Au final, il permet de développer, partager et publier facilement dans les magasins vos projets mobiles. C'est assez similaire à l'expérience PhoneGap (mais beaucoup mieux et moins déroutant).

Je recommanderai définitivement Expo pour tout nouveau projet greenfield React Native, à l'exception de ces 2 cas:

  • Vous savez déjà que vous avez besoin d'API qui ne sont pas disponibles dans Expo et ne le seront pas de sitôt
  • Vous vous souciez beaucoup de la taille de votre application (HelloWorld est> 25 Mo en raison de la grande taille d'ExpoKit, mais après cela, il n'augmente pas beaucoup car il ne s'agit que de JS)
Sébastien Lorber
la source
1
J'essaie de trouver une liste des API Expo ne prend pas en charge. Quelqu'un sait où trouver cela?
ronnyrr
@ronnyrr Expo ne prend pas en charge tout ce qui n'est pas JS et qui n'est pas inclus dans RN brut et ExpoKit. Il existe une liste infinie de choses que Expo ne prend pas en charge, car c'est tout le reste qui n'est pas dans la liste finie de fonctionnalités qu'Expo prend en charge. Ce que vous demandez ne peut exister.
Sebastien Lorber
2
@ronnyrr Je pense que c'est ce que vous cherchez: expo.canny.io c'est une liste de demandes de fonctionnalités que vous pouvez trier par popularité
Evan Bacon
26

Il est expliqué dans la documentation officielle de l'Expo

Quelle est la différence entre Expo et React Native?

Expo est un peu comme Rails pour React Native. Beaucoup de choses sont mises en place pour vous, il est donc plus rapide de commencer et sur la bonne voie.

Avec Expo, vous n'avez pas besoin de Xcode ou d'Android Studio. Vous écrivez simplement JavaScript en utilisant l'éditeur de texte avec lequel vous êtes à l'aise (Atom, vim, emacs, Sublime, VS Code, tout ce que vous voulez). Vous pouvez exécuter XDE (notre logiciel de bureau) sur Mac, Windows et Linux.

Voici quelques-unes des choses que l'Expo vous offre immédiatement qui fonctionnent:

Prise en charge d'iOS et d'Android

Vous pouvez utiliser des applications écrites dans Expo sur iOS et Android dès la sortie de la boîte. Vous n'avez pas besoin de passer par un processus de construction distinct pour chacun. Ouvrez simplement n'importe quelle application Expo dans l'application Expo Client de l'App Store sur iOS ou Android (ou dans un simulateur ou un émulateur sur votre ordinateur).

Notifications push

Les notifications push fonctionnent dès la sortie de la boîte sur iOS et Android, en utilisant une seule API unifiée. Vous n'avez pas à configurer APNS et GCM / FCM ou configurer ZeroPush ou quelque chose comme ça. Nous pensons que nous avons rendu cela aussi simple que possible en ce moment.

Identifiant Facebook

Cela peut prendre beaucoup de temps pour être correctement configuré vous-même, mais vous devriez pouvoir le faire fonctionner en 10 minutes ou moins sur Expo.

Mise à jour instantanée

Toutes les applications Expo peuvent être mises à jour en quelques secondes en cliquant simplement sur Publier dans XDE. Vous n'avez rien à configurer; cela fonctionne comme ça. Si vous n'utilisez pas Expo, vous utiliserez soit Microsoft Code Push, soit vous lancerez votre propre solution pour ce problème.

La gestion d'actifs

Les images, vidéos, polices, etc. sont tous distribués dynamiquement sur Internet avec Expo. Cela signifie qu'ils fonctionnent avec une mise à jour instantanée et peuvent être modifiés à la volée. Le système de gestion des actifs intégré à Expo prend en charge le téléchargement de tous les actifs de votre référentiel sur un CDN afin qu'ils se chargent rapidement pour n'importe qui.

Sans Expo, la chose normale à faire est de regrouper vos actifs dans votre application, ce qui signifie que vous ne pouvez pas les modifier. Ou vous devez gérer vous-même le placement de vos actifs sur un CDN ou similaire.

Mise à jour plus facile vers les nouvelles versions natives de React

Nous faisons de nouvelles versions d'Expo toutes les quelques semaines. Vous pouvez rester sur une ancienne version de React Native si vous le souhaitez, ou passer à une nouvelle, sans vous soucier de reconstruire le binaire de votre application. Vous pouvez vous soucier de mettre à jour le JavaScript à votre guise.

Mais pas de modules natifs…

La chose la plus limitative à propos d'Expo est que vous ne pouvez pas ajouter vos propres modules natifs sans détacher et utiliser ExpoKit.

gumkins
la source
2
j'utilise expo dans windows 8. comment générer du code QR pour que je lance directement mon application sur mon appareil.
Prasanna
1
Je ne l'ai pas essayé sous Windows, mais je pense qu'il doit être similaire sur n'importe quel système. Le code QR est généré automatiquement dans la Expo XDEconsole ou dans la exp startsortie de commande de la console.
gumkins
1
$ prasanna Parfois, vous ne voyez pas de code QR car vous n'avez pas votre téléphone et votre machine de développement sur le même réseau. Par exemple, si vous travaillez à domicile, assurez-vous que votre téléphone est connecté à votre réseau domestique. Et etc ...
ccalvert
expo startvous montrera également une adresse IP sur votre hôte local, vous pouvez accéder au code QR de
Jordan Simba
7

EXPO CLI

avantages:-

 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.

Les inconvénients:-

 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

React Native Cli

Avantages:-

 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.

Les inconvénients:-

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.

Vous pouvez préférer n'importe quelle approche selon vos besoins.

Atul Tiwari
la source
2

Je voudrais noter ici qu'Expo utilise une ancienne version de react 16.5 qui vous interdirait d'utiliser la nouvelle fonctionnalité de hooks. Si vous décidez de choisir Expo, n'oubliez pas de surveiller vos contrôles de version. Les versions plus anciennes de say react-navigation devront être utilisées avec la version 16.5 si vous obtenez des erreurs étranges.

SMW
la source
expo updatefait un très bon travail pour obtenir les versions compatibles pour la plupart des packages gérés par Expo. Pour l'instant, je ne pense pas que cela met à jour React Navigation, mais cette bibliothèque est en fait sponsorisée par Expo. Personnellement, je rencontre rarement des problèmes de compatibilité entre React Navigation et Expo (je pense avoir rencontré quelques problèmes lors de l'utilisation des versions bêta). Cependant, vous pouvez voir plus de problèmes de compatibilité avec les packages non gérés par Expo.
Christian Juth
2

Les réponses sur les avantages et les inconvénients de expo et react-native-cli sont complètes. Je veux mentionner un autre point comme mon expérience personnelle. Expo contient de nombreux modules par défaut dans le projet et facilite son utilisation. Mais il y a un gros problème sur la phase de production parce que les versions construites androidet iosont une si grande taille. Par exemple , si vous avez une seule page avec 'Hello World'la apktaille du fichier serait à peu près 19 MB. Avoir un même projet dans react-native-cli se traduira par une application de la taille de 6 MB.

Donc, personnellement, je ne recommande pas d'utiliser expo si vous souhaitez développer une application commerciale.

Meisam Nazari
la source
Je ne pense pas que ce soit une raison suffisante pour que les applications expo ne soient pas prêtes pour la production. En outre, cela a été expliqué en détail par les réponses précédentes
Dawoodjee
1

J'ai connu plus d'un an qui fonctionne avec expo Si la taille de l'application n'a pas d'importance pour vous, utilisez Expo car il est facile d'implémenter Map, Push plus facile que React-native mais à la fin du projet si vous souhaitez publier dans Google Play ou dans un autre magasin, vous avez du mal à supprimer certaines autorisations dans votre APK React natif, vous pouvez tout changer, mais pour importer une bibliothèque telle qu'une notification push ou la carte a également besoin de quelques défis car vous devez ajouter ces bibliothèques manuellement à projets Android et iOS

Amir Ardalan
la source
-1

expo est une chaîne d'outils construite autour de React Native pour vous aider à démarrer rapidement une application. Il fournit un ensemble d'outils qui simplifient le développement et les tests de l'application React Native et de l'interface et des services qui sont généralement disponibles dans les composants React Native natifs tiers. Avec Expo, vous pouvez tous les trouver dans Expo SDK.

Shivo'ham 0
la source