web-dev-qa-db-fra.com

Différence entre ExpoKit et React Native project

J'ai fait beaucoup de recherches maintenant pour découvrir les différences exactes et les compromis entre un projet React Native, CRNA et un projet Expo).

Ma principale orientation était this

Cependant, je ne comprends toujours pas quels (dés) avantages j'utilise ExpoKit avec du code natif par rapport à un projet normal React Native avec du code natif, à part le fait que je ne peux pas utiliser API Expo dans un projet normal React Native.

Je sais que lorsque je démarre un projet dans Expo, je peux l'éjecter en tant que projet ExpoKit ou en tant que projet React Native. Dans les deux cas, je peux utiliser du code natif. Dans ExpoKit, je peux toujours utiliser les API Expo dans un React projet natif normal, je ne peux pas.

Alors mes questions:

  1. Quel serait mon intérêt à utiliser un projet natif réactif si je peux utiliser du code natif et toutes les API Expo dans un projet ExpoKit? Dans un projet ExpoKit, je peux toujours utiliser toutes les API Expo et toutes les React API natives, non?!

  2. Puis-je utiliser des API Expo dans un React projet natif si j'installe expo avec npm install --save expo?

  3. Quelle est la différence entre React API native et API Expo?

18
Benjamin Heinke

ExpoKit est une sorte d'hybride entre les applications Expo "pure JS" et "Vanilla" React Native. À la base, il s'agit toujours d'un projet React Native, mais certaines choses diffèrent sur le système de construction, l'expérience des développeurs et les fonctionnalités disponibles.

Traits

À ce jour, la plupart des API du SDK d'Expo ne sont pas disponibles dans un projet natif Vanilla React, mais elles sont disponibles dans ExpoKit. Nous pensons que cela pourrait changer à l'avenir, mais ce sera beaucoup de travail.

Le service de notification Push d'Expo ne fonctionne pas actuellement dans ExpoKit, ni pour Vanilla React Native.

Build System

Les applications Vanilla RN et les applications ExpoKit utilisent Xcode et Android Studio pour créer le code natif. Les applications iOS ExpoKit utilisent CocoaPods pour installer les dépendances, ce qui peut ajouter un peu de complexité à la gestion de la génération native. Android Les applications ExpoKit ont une configuration Gradle supplémentaire pour construire plusieurs versions de React Native dans le même binaire (ceci est utilisé pour permettre les mises à jour en direct de plusieurs versions SDK de JS), ce qui peut parfois augmenter la complexité de l'ajout d'autres bibliothèques natives React.

Le JavaScript pour un projet ExpoKit et React Native est construit par Metro, bien que dans ExpoKit vous devez exécuter Metro en utilisant les outils XDE ou exp d'Expo afin qu'ils puissent gérer une configuration supplémentaire pour le projet. Cela signifie que vous exécutez une commande comme exp start Plutôt que react-native run-Android.

En raison de la conception actuelle d'ExpoKit (bien que cela puisse changer à l'avenir), certaines bibliothèques natives open source React peuvent avoir des problèmes de compatibilité avec ExpoKit. Par exemple, si une bibliothèque native s'attend à pouvoir demander une référence à l'instance OkHttp de React Native sur Android, il peut y avoir une différence de type lors de l'exécution dans ExpoKit en raison de l'espace de noms utilisé par Expo pour autoriser plusieurs versions de React Native à compiler. Cela dit, ces problèmes ont tendance à être assez rares, et nous travaillons sur différentes manières pour qu'ExpoKit soit de plus en plus compatible avec les bibliothèques de l'écosystème.

Cette prise en charge multi-versions signifie également que les binaires ExpoKit ont tendance à être plus volumineux que les binaires natifs Vanilla React correspondants, bien que cela puisse changer à l'avenir.

Vos sous-questions

  1. Certains développeurs préfèrent gérer la façon dont leurs bundles JS et leurs actifs sont distribués eux-mêmes, ou ils peuvent avoir besoin d'une bibliothèque qui n'est pas actuellement compatible avec ExpoKit. La taille binaire est une autre raison pour laquelle vous pouvez préférer Vanilla RN.
  2. Il n'est actuellement pas possible d'utiliser la plupart des API Expo dans un projet natif React. Certaines API disponibles dans l'Expo SDK sont regroupées à partir de projets open source (tels que react-native-maps) et peuvent être utilisées avec un projet Vanilla RN.
  3. Je ne sais pas comment analyser cette question - les API Expo ne sont actuellement que React API natives qui savent se parler et faire certaines hypothèses sur l'environnement dans lequel elles s'exécutent.

Question du commentaire 1: Vous pouvez modifier la version d'ExpoKit comme vous le souhaitez, bien que cela puisse rendre la mise à niveau vers une nouvelle version du SDK légèrement plus difficile en fonction du niveau de modification.

19
dikaiosune