289 votes

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

De site web d'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 fait React Native? Quelle est la différence?

272voto

brentvatne Points 2929

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

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

  2. Client Expo : une application sur votre téléphone qui vous permet d'ouvrir vos projets pendant que vous travaillez dessus, sans avoir besoin de passer par XCode ou Android Studio, et permet également à d'autres personnes de les visualiser aussi ! Et si vous le publiez via expo-cli, les gens peuvent y accéder à tout moment via le client Expo sur Android ou sur iOS s'ils sont connectés au même compte avec lequel il a été publié. Enfin, nous rendons également possible la construction d'applications autonomes afin que les gens n'aient pas besoin d'utiliser le client Expo pour les ouvrir, et vous pouvez les distribuer sur l'app store et le play store si vous le souhaitez.

Ainsi, Expo est un ensemble d'outils construits au-dessus de React Native. Ces outils dépendent d'une croyance clé chez Expo : il est possible de construire 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 passer au code natif. Cela est parfois incroyablement utile mais cela a un coût : vous devez envoyer vos binaires aux gens si vous voulez qu'ils les testent, quelqu'un de l'autre côté 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 clic pour que quelqu'un puisse y accéder 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é précédemment, nous pensons qu'avec un ensemble complet d'API disponibles pour JavaScript, cela ne devrait pas être nécessaire pour la plupart des applications. Ainsi, nous visons à fournir cet ensemble complet d'API, puis à construire tous les outils impressionnants qui peuvent exister dans un monde où le moteur natif est partagé.

Cependant, si vous trouvez que vous devez passer au code natif, vous pouvez utiliser l'éjection et continuer à utiliser les API native qu'Expo vous fournit tout en ayant le même niveau de contrôle que vous auriez dans n'importe quel projet natif.

En savoir plus sur l'éjection

5 votes

"Avec Exponent, vous ne pouvez pas descendre au code natif". Il est bon de savoir que vous n'ÊTES PAS obligé de passer au code natif, mais que se passe-t-il si vous en avez besoin, pourquoi Exponent vous empêcherait-il de le faire?

3 votes

Ah je peux comprendre comment cela était flou. Ainsi, le client Exponent est complètement open source (github.com/exponentjs/exponent), ce qui signifie que vous pouvez écrire du code natif si vous le souhaitez, mais alors vous traitez effectivement les bibliothèques Exponent comme une collection de modules natifs dans une application React Native typique. C'est tout à fait bien et cela a été un moteur de motivation pour nous de rendre le projet open source. Cela dit, si vous souhaitez pouvoir utiliser nos outils (constructeur binaire d'application, client Exponent sur l'App/Play Store pour partager des versions de test, notifications push intégrées, etc.), alors vous ne pouvez pas écrire de code natif.

2 votes

Au moment de l'écriture, Expo s'est assez bien débrouillé pour intégrer des plugins natifs utiles. Cependant, ils manquent d'une intégration de plugin MAJEURE pour les achats intégrés et sans cela, vous ne pouvez pas gagner d'argent avec votre application !!! Et vous demandez, quel est l'intérêt de créer une application si je ne peux pas en tirer profit !!

145voto

Benjamin Heinke Points 382

Un résumé de la documentation et des réponses des employés d'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
  • Le périphérique 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 le fichier .apk / .ipa entier
  • Ne fournit pas d'APIs JS prêtes à l'emploi, par exemple les Push-Notifications, Asset Manager, ils doivent être installés manuellement et liés avec npm par exemple
  • Configurer correctement un projet fonctionnel (y compris la configuration du périphérique) est plutôt compliqué et peut prendre du temps

Expo

Avantages

  • La mise en place d'un projet est facile et peut être faite en quelques minutes
  • Vous (et d'autres personnes) pouvez ouvrir le projet pendant que vous travaillez dessus
  • Partager l'application est facile (via QR-code ou lien), vous n'avez pas à envoyer le fichier .apk ou .ipa entier
  • Aucune compilation nécessaire pour exécuter l'application
  • Intègre certaines bibliothèques de base dans un projet standard (Notifications Push, Gestionnaire de ressources, etc.)
  • 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 générer des fichiers .apk et .ipa (distribution possible dans les magasins avec Expo)

Inconvénients

  • Vous ne pouvez pas ajouter de modules natifs (probablement un élément déterminant pour certains)
  • Vous ne pouvez pas utiliser de bibliothèques qui utilisent du code natif en Objective-C/Java
  • L'application standard Hello World fait environ 25 Mo (en raison des bibliothèques intégrées)
  • Si vous souhaitez utiliser: FaceDetector, ARKit, ou les paiements, vous devez l'éjecter vers ExpoKit
  • Éjecter vers ExpoKit entraîne une perte de 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 de react-native prise en charge par ExpoKit
  • Déboguer dans ExpoKit (avec des modules natifs) est beaucoup plus compliqué, car cela mélange deux langues et différentes bibliothèques (il n'y a plus de support officiel d'Expo)

Sources:

1 votes

Merci @BenjaminHeinke pour une image claire des avantages et inconvénients. Je rencontre déjà l'inconvénient n°2 avec notre décision d'adopter expo pour notre application réagir native. Nous ne pouvons pas intégrer avec Appsee à cause de cela. N'y a-t-il pas de solution de contournement pour cela ?

3 votes

Le périphérique n'a pas besoin d'être connecté au port USB pour les tests, seulement la première compilation et l'installation doivent être effectuées via USB. Ensuite, vous pouvez utiliser le Wi-Fi! Une recompilation sera nécessaire si vous apportez des modifications au code natif.

51voto

Sebastien Lorber Points 9682

La réponse de Brent Vatne est bonne mais j'aimerais ajouter quelques détails.


Expo étend la surface API de React Native

React Native ne vous donne pas toutes les APIs JS dont vous avez besoin dès le départ, mais seulement les fonctionnalités les plus primitives. Les développeurs React Native doivent utiliser Android Studio/XCode pour lier des bibliothèques natives supplémentaires. Expo vise à améliorer RN et à fournir toutes les APIs 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à empaquetées pour vous dans une seule bibliothèque : ExpoKit. Parfois, ces bibliothèques existent déjà dans le monde de RN et sont intégrées dans ExpoKit.

Il est également important de noter que l'équipe Expo ne peut pas inclure toutes les bibliothèques disponibles dans ExpoKit (ce qui peut créer de la frustration) car la taille de l'application "Hello World" augmenterait, en transportant de nombreuses APIs qui ne seraient pas utilisées dans la plupart des applications.

Expo fournit des mises à jour JS sans fil

Comme d'autres systèmes (CodePush...), Expo propose un système de mise à jour de votre application à distance. 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 une publication/revue des magasins).

Expo fournit un outil en ligne de commande 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 héberger le bundle JS en local. Et XDE est simplement une interface visuelle de 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 exact (RN + ExpoKit), la seule différence est le JS que nous leur donnons. Les applications Expo que vous publiez sur les magasins d'applications ont l'URL de votre bundle JS codée en dur. Le client Expo est conçu de manière spécifique pour 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, rendant votre expérience de développement plus facile : pas besoin d'XCode ou d'Android Studio, et il devient beaucoup plus rapide d'avoir votre premier Hello World fonctionnant sur le téléphone (de quelques heures à quelques minutes). Vous pouvez en fait développer sur un iPhone sans Mac et la configuration prend 2 minutes.

En fait, comme le SDK Expo peut être mis à jour, le client Expo inclut une couche de compatibilité de sorte qu'il est capable de prendre en charge 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 capable de construire facilement ces applications pour vous. Ils ont créé un service de construction cloud.

La principale différence entre 2 applications construites par Expo est juste l'URL codée en dur vers laquelle l'application est censée télécharger le bundle JS pour s'exécuter.

Expo fait également d'autres choses pour vous, comme fournir un moyen déclaratif de configurer les icônes de l'application, les orientations, les permissions, les clés API, vous aidant à configurer les notifications push, les profils de provisionnement... de nombreux paramètres doivent être codés en dur au moment de la construction de l'application et ne peuvent pas être modifiés à distance.

Expo est à React Native ce que Phonegap est à Cordova

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

PhoneGap est similaire à Expo. Ils essaient tous deux d'enrichir l'API brute de la plateforme sous-jacente sur laquelle ils sont construits avec un ensemble prédéfini de plugins natifs supplémentaires. PhoneGap propose également un service de construction et possède 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. À la fin, cela permet de développer, partager et publier facilement vos projets mobiles sur les magasins. C'est assez similaire à l'expérience PhoneGap (mais beaucoup mieux et moins confuse).

Je recommanderais certainement Expo pour tout nouveau projet React Native greenfield, sauf dans ces 2 cas :

  • Vous savez déjà que vous avez besoin d'APIs 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 fait > 25 Mo en raison de la grande taille d'ExpoKit, mais après cela, elle n'augmente pas beaucoup car c'est juste du JS).

2 votes

Je suis en train d'essayer de trouver une liste des API qu'Expo ne prend pas en charge. Quelqu'un sait où je peux trouver cela?

0 votes

@ronnyrr Expo ne prend pas en charge tout ce qui n'est pas du JS et qui n'est pas inclus dans le RN brut et ExpoKit. Il y a une liste infinie de choses qu'Expo ne prend pas en charge, car c'est tout le reste qui n'est pas dans la liste finie des fonctionnalités prises en charge par Expo. Ce que vous demandez ne peut pas exister.

2 votes

@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é

30voto

gumkins Points 591

Il est expliqué dans la documentation officielle d'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, donc il est plus rapide de démarrer et d'emprunter le bon chemin.

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

Voici quelques-unes des fonctionnalités qu'Expo vous offre immédiatement :

Prise en charge d'iOS et Android

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

Notifications Push

Les notifications push fonctionnent dès le départ sur iOS et Android, en utilisant une seule API unifiée. Vous n'avez pas à configurer APNS et GCM/FCM ou à configurer ZeroPush ou quoi que ce soit de ce genre. Nous pensons avoir rendu cela aussi simple que possible pour le moment.

Connexion Facebook

Cela peut prendre beaucoup de temps pour être configuré correctement par vous-même, mais vous devriez être en mesure 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 n'avez rien à configurer; cela fonctionne juste de cette manière. Si vous n'utilisez pas Expo, vous devriez utiliser Microsoft Code Push ou mettre en place votre propre solution pour ce problème.

Gestion des ressources

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 ressources intégré à Expo se charge de télécharger toutes les ressources de votre dépôt sur un CDN pour qu'elles se chargent rapidement pour tout le monde.

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

Facilité de mise à jour vers de nouvelles versions de React Native

Nous publions 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 votre application binaire. Vous pouvez vous concentrer sur la mise à jour du JavaScript à votre propre rythme.

Mais pas de modules natifs...

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

2 votes

Je suis en train d'utiliser Expo sur Windows 8. Comment générer un code QR pour pouvoir directement exécuter mon application sur mon appareil ?

1 votes

Je ne l'ai pas essayé sur Windows, mais je pense que cela doit être similaire sur n'importe quel système. Le code QR est généré automatiquement soit dans la console Expo XDE soit dans la sortie de la commande console exp start.

1 votes

$prasanna Parfois, vous ne voyez pas de code QR parce que 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 à la maison, assurez-vous que votre téléphone est connecté à votre réseau domestique. Et etc...

18voto

Atul Tiwari Points 298

EXPO CLI

Avantages:

  1. Pas besoin d'installer Android Studio ou Xcode pour commencer à construire.
  2. Pas beaucoup de configuration nécessaire.
  3. Interface mobile pour voir facilement à la fois sur Android et iPhone en utilisant la numérisation de code-barres. Aussi plus facile à visualiser avec des simulateurs iPhone et Android en ligne.
  4. Mise en place et développement plus rapides.

Inconvénients:

  1. Les dépendances natives ne peuvent pas être ajoutées.
  2. La création de fichiers .apk et .ipa est difficile.
  3. La taille de l'apk/ipa est énorme.

React Native CLI

Avantages:

  1. Ajout facile des dépendances natives.
  2. Créer des fichiers .apk et .ipa est beaucoup plus facile qu'avec Expo.

Remarque: React Native CLI est le framework à utiliser pour travailler directement avec le framework React Native.

Inconvénients:

  1. Niveau élevé de configuration requis.
  2. Des connaissances de base de la structure de dossiers Android et iOS sont nécessaires.

Comme vous pouvez le voir, les deux approches ont leurs avantages et leurs inconvénients; vous devriez toujours décider lequel utiliser en fonction de vos besoins pour le projet.

0 votes

Explication concise et précise. Merci!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X