web-dev-qa-db-fra.com

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

De le site web de l'Expo

Expo permet aux développeurs Web de créer de véritables applications natives fonctionnant à la fois sur iOS et Android en les écrivant une seule fois en JavaScript.

N'est-ce pas ce que React Native fait? Quelle est la différence?

128
Aurora

Je travaille à Expo!

Lorsque vous écrivez du code dans Expo, vous écrivez React Native code. Expo a deux pièces principales:

1) expo-cli: outil de développement pour la création de projets, la visualisation de journaux, l’ouverture sur votre appareil, la publication, etc.

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

Donc, Expo est un ensemble d’outils construit autour de React Native. Ces outils reposent sur une conviction fondamentale que nous avons en Expo: il est possible de créer la plupart des applications sans jamais avoir besoin d'écrire de code natif, à condition que vous disposiez d'un ensemble complet d'API exposées à Javascript.

Ceci est important car avec React Native, vous pouvez toujours accéder au code natif. C'est incroyablement utile parfois, mais cela a un coût: vous devez envoyer vos fichiers binaires aux utilisateurs si vous voulez les tester, quelqu'un de l'autre côté du monde ne peut pas simplement appuyer sur un lien pour l'ouvrir pendant que vous travaillez. et vous ne pouvez pas simplement le publier en un 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 pour Javascript, cela ne devrait pas être nécessaire pour la plupart des applications. Nous avons donc pour objectif de fournir cet ensemble complet d’API, puis de construire tous les formidables outils pouvant exister dans un monde où le moteur d’exécution natif est partagé.

Toutefois, si vous devez absolument trouver le mode natif, vous pouvez utiliser ExpoKit pour continuer à utiliser les API natives que Expo vous offre tout en gardant le même niveau de contrôle que dans n'importe quel projet natif. . "ExpoKit est une bibliothèque Objective-C et Java qui vous permet d'utiliser la plate-forme Expo et votre projet Expo existant dans le cadre d'un projet natif standard plus grand. " Lire la suite ici.

160
brentvatne

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

Réagir init natif:

Avantages :

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

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
  • Le périphérique doit être connecté via USB pour pouvoir être testé
  • 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 les API JS prêtes à l'emploi, par exemple. Notifications push, Asset Manager, ils doivent être installés manuellement et liés avec npm par exemple
  • Configurer correctement un projet (y compris la configuration de l'appareil) est assez compliqué et peut prendre du temps

Expo

Avantages :

  • Mettre en place un projet est facile et peut être fait en quelques minutes
  • Vous (et d'autres personnes) pouvez ouvrir le projet pendant que vous y travaillez
  • Partager l'application est facile (via QR-code ou lien), vous n'avez pas à envoyer le fichier .apk ou .ipa en entier
  • Aucune construction nécessaire pour exécuter l'application
  • Intègre certaines bibliothèques de base dans un projet standard (notifications push, Asset Manager, ...)
  • Vous pouvez l'éjecter dans ExpoKit et intégrer le code natif en utilisant certaines fonctionnalités de l'Expo, mais pas toutes.
  • Expo peut créer des fichiers .apk et .ipa (distribution dans les magasins possible avec Expo)

Inconvénients :

  • Vous ne pouvez pas ajouter de modules natifs (probablement un modificateur de jeu pour certains)
  • Vous ne pouvez pas utiliser de bibliothèques utilisant du code natif dans Objective-C/Java
  • L’application standard Hello World mesure environ 25 Mo (à cause des bibliothèques intégrées)
  • Si vous souhaitez utiliser: FaceDetector, ARKit o Payments, vous devez l'éjecter dans ExpoKit.
  • Le fait de l'expulser vers ExpoKit comporte un compromis entre les fonctionnalités d'Expo, par exemple. vous ne pouvez pas partager via QR code
  • Lorsque vous éjectez dans ExpoKit, vous êtes limité à la version native de réaction 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 des bibliothèques différentes (plus aucun support officiel d'Expo)

J'espère pouvoir résumer les points les plus importants. S'il vous plaît n'hésitez pas à ajouter des points supplémentaires.

Sources: https://code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661https://github.com/react -community/create-react-native-app/issues/516 # issueecomment-373629114https://docs.expo.io/versions/latest/guides/detach.html (documentation officielle en général)

50
Benjamin Heinke

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

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

Expo ressemble un peu à Rails pour React Native. Beaucoup de choses sont préparées pour vous, il est donc plus rapide de commencer et sur le bon chemin.

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

Voici quelques-unes des choses que l’Expo vous offre hors de la boîte et qui fonctionnent tout de suite:

Support pour iOS et Android

Vous pouvez utiliser les applications écrites dans Expo sur iOS et Android directement. Vous n'avez pas besoin de suivre un processus de construction distinct pour chacun d'eux. Ouvrez simplement une application Expo dans l'application Expo Client depuis l'App Store sur iOS ou Android (ou dans un simulateur ou un émulateur sur votre ordinateur).

Notifications Push

Les notifications push fonctionnent immédiatement avec iOS et Android, à l'aide d'une API unique et unifiée. Vous n’avez pas besoin de configurer APNS et GCM/FCM, ni de configurer ZeroPush ou quelque chose du genre. Nous pensons que nous avons simplifié les choses autant que possible.

Facebook Login

Cela peut prendre beaucoup de temps pour vous préparer vous-même, mais vous devriez être capable de 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 ne devez rien configurer; ça marche juste comme ça. Si vous n’utilisez pas Expo, vous devez utiliser Microsoft Code Push ou créer votre propre solution à ce problème.

Gestion d'actifs

Les images, les vidéos, les polices de caractères, etc. sont tous distribués de manière dynamique 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 dépôt sur un CDN afin qu’ils soient rapidement téléchargés par quiconque.

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

Mise à jour simplifiée vers un nouveau React Sorties natives

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 mettre à niveau vers une nouvelle version sans vous soucier de la reconstruction du binaire de votre application. Vous pouvez vous préoccuper de la mise à niveau de JavaScript à votre rythme.

Mais pas de modules natifs…

Le principal inconvénient d’Expo est qu’il est impossible d’ajouter vos propres modules natifs sans détacher et utiliser ExpoKit.

16
gumkins

La réponse de Brent Vatne est correcte mais je voudrais ajouter quelques détails.


Expo étend la surface de l'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. React Les développeurs natifs sont censés utiliser Android Studio/XCode pour lier d'autres bibliothèques natives. Expo vise à améliorer les RN et à fournir toutes les API JS dont vous avez besoin pour répondre aux besoins les plus courants. Il s’agit en fait 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 des infirmières et sont intégrées à ExpoKit.

Il est également important de noter que l'équipe de l'Expo ne peut inclure toutes les bibliothèques présentes dans ExpoKit (ce qui peut créer une certaine frustration), car la taille de l'application hello world augmenterait car elle produirait 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 permettant de mettre à jour votre application par liaison radio. Cela signifie que vous téléchargez votre paquet JS sur un CDN et que les applications mobiles téléchargeront et utiliseront automatiquement le nouveau JS au prochain démarrage (sans demander une publication/revue des magasins).

Expo fournit un outil CLI pour charger/gérer les offres 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 toute application compatible avec Expo. Toutes les applications Expo partagent exactement le même runtime natif (RN + ExpoKit), la seule différence est le JS que nous leur fournissons. Les applications Expo que vous publiez dans les magasins d'applications ont votre URL de paquet JS codée en dur. Le client Expo est construit de manière spécifique afin que vous puissiez choisir l’URL à charger pour le JS, en scannant un QRCode ou en fournissant une URL.

Notez que ce client peut également charger des ensembles JS depuis localhost et faciliter votre expérience de développement: nul besoin de XCode ou de Android Studio, et il est beaucoup plus rapide de lancer votre premier Hello World au téléphone (à partir de heures à minutes). Vous pouvez réellement développer sur un iPhone sans Mac et la configuration prend 2 minutes.

En réalité, le SDK de l'Expo pouvant être mis à niveau, le client de l'Expo comprend une couche de compatibilité lui permettant d'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 peut facilement créer ces applications pour vous. Ils ont créé un service de construction en nuage.

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

Expo fait d’autres choses pour vous, comme fournir un moyen déclaratif de configurer les icônes, orientations, autorisations, clés d’application, en vous aidant à configurer les notifications Push, les profils de provisioning, etc. De nombreux paramètres doivent être codés en dur au moment de la création dans l’app ne pas être changé par voie aérienne.

Expo is to React Native ce que Phonegap est pour Cordova

React Native est similaire à Cordova. Ce n’est pas la même technologie d’affichage (native vs webview), mais les deux vous permettent de contrôler les fonctionnalités natives de javascript. Ils offrent tous deux un système de plug-in permettant aux développeurs d’ajouter facilement de nouvelles liaisons JS/natives.

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

Conclusion

Comme vous pouvez le constater, Expo est un ensemble d’outils. À la fin, cela vous permet de développer, de partager et de publier facilement dans vos 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 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, elle n'augmente pas beaucoup car il s'agit uniquement de JS)
12
Sebastien Lorber

EXPO CLI avantages: - 1. Pas besoin d'installer Android studio et Xcode pour commencer à créer une application mobile. 2. Aucune exigence de machine de configuration élevée pour le développement. 3. L’interface mobile vérifie facilement les appareils Android et l’iPhone à l’aide du balayage des codes à barres. Vous pourrez également vérifier quelques temps sur les simulateurs en ligne pour iPhone et Android. 4. développement rapide. Inconvénients: - 1. La dépendance native ne peut pas ajouter d'expo car le projet expo n'a pas de dossier ios ni Android, donc ici expo est limité. 2. Faire apk et ipa est difficile avec expo. React Native Cli

Avantages: - 1. Ajoutez facilement une dépendance native pour Android et ios car cette structure de projet contient des dossiers ios et Android. 2. Construire Apk et Ipa est facile plutôt que d’exposer. Remarque ": - React Native Cli est la bonne approche pour commencer à travailler sur le framework natif de react. Inconvénients: - 1. Un ordinateur avec une configuration élevée est requis. 2. Ajouter une dépendance un peu plus difficile mais bien. 3. Base requise connaissance de la structure des dossiers Android et des dossiers ios, mais en apprenant plus de choses.

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

5
Atul Tiwari

Les réponses concernant les avantages et les inconvénients d’expo et de react-native-cli sont complètes. Je veux mentionner un autre point comme expérience personnelle. Expo contient par défaut de nombreux modules dans le projet et facilite son travail. Mais cela pose un gros problème en phase de production car les versions Android et ios construites ont une telle taille. Par exemple, si vous avez une seule page avec un 'Hello World', la taille du fichier apk serait d'environ 19 MB. Avoir un même projet dans react-native-cli donnera une application de la taille de 6 MB.

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

3
meisam nazari

Je tiens à noter ici que l’Expo utilise une version plus ancienne de react 16.5, ce qui vous interdirait d’utiliser la nouvelle fonctionnalité de hooks. Si vous décidez d’utiliser Expo, faites attention à 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.

1
SMW