¿Cuál es la diferencia entre Expo y React Native?

Respuestas:

206

Yo trabajo en la Expo!

Cuando escribes código Expo, escribes React Nativecódigo.Expotiene dos piezas principales:

1) expo-cli : una herramienta de desarrollador para crear proyectos, ver registros, abrir en su dispositivo, publicar, etc.

2) El Expocliente: una aplicación en su teléfono que le permite abrir sus proyectos mientras se está trabajando en ellas, sin necesidad de pasar por XCodeo Android Studio, y también permite que otras personas los ven también! Y si lo publica expo-cli, las personas pueden acceder a él en cualquier momento a través del Expocliente en Android o en iOS si inició sesión en la misma cuenta con la que se publicó. Por último, también hacemos posible la creación de aplicaciones independientes para que las personas no tengan que usar el Expocliente para abrirlo, y puede distribuirlo a la tienda de aplicaciones y play store si lo desea.

Entonces, Expoes un conjunto de herramientas construido sobre / alrededor React Native. Estas herramientas dependen de una creencia clave que mantenemos Expo: es posible construir la mayoría de las aplicaciones sin necesidad de escribir código nativo, siempre que tenga un conjunto completo de API expuestas aJavascript .

Esto es importante porque con React Native siempre puede desplegarse en código nativo. Esto es increíblemente útil a veces, pero tiene un costo: debe enviar a las personas sus archivos binarios si desea que los prueben, alguien en el otro lado del mundo no puede simplemente tocar un enlace para abrirlo mientras trabaja en él y no puede simplemente publicarlo con un clic para que alguien acceda a él de forma similar a como lo haría en un navegador.

Con Expo, le sugerimos que intente evitar caer al código nativo, si puede. Como mencioné anteriormente, creemos que con un conjunto completo de API disponibles paraJavascript , esto no debería ser necesario para la mayoría de las aplicaciones. Por lo tanto, nuestro objetivo es proporcionar este conjunto integral de API y luego construir todas las herramientas increíbles que pueden existir en un mundo donde se comparte el tiempo de ejecución nativo.

Sin embargo, si debe descubrir que se despliega absolutamente a nativo, puede usarlo ExpoKitpara continuar usando las API nativas que Expole brinda mientras tiene el mismo nivel de control que tendría en cualquier proyecto nativo. " ExpoKites una biblioteca de Objective-C y Java que le permite utilizar la Expoplataforma y su Expoproyecto existente como parte de un proyecto nativo estándar más grande". Leer más aquí.

brentvatne
fuente
44
"Con Exponent, no puede desplegarse en código nativo". Es bueno saber que no TIENES que desplegar el código nativo, pero ¿qué pasa si lo necesitas? ¿Por qué Exponent te impediría hacerlo?
Otto
3
Ah, puedo ver cómo eso no estaba claro. Por lo tanto, el cliente Exponent es completamente de código abierto ( github.com/exponentjs/exponent ), lo que significa que puede escribir código nativo si lo desea, pero efectivamente está tratando las bibliotecas Exponent como una colección de módulos nativos en un React Native de lo contrario. aplicación Esto está totalmente bien y nos motivó a abrir el proyecto de código abierto. Dicho esto, si desea poder utilizar nuestras herramientas (generador de binarios de aplicaciones, cliente Exponent en la tienda de aplicaciones / juegos para compartir compilaciones de prueba, notificaciones push incorporadas, etc.), no puede escribir código nativo.
brentvatne
Al momento de escribir, Expo se ha vuelto bastante bueno con la integración de complementos nativos útiles. Sin embargo, ¡carecen de una integración de complemento PRINCIPAL para IAP y sin ella, no puede ganar dinero con su aplicación! Y preguntas, ¿qué sentido tiene hacer una aplicación si no puedo obtener ganancias?
Adam
96

Traté de hacer un resumen de la documentación y las respuestas de los empleados de la Expo:

Reaccionar init nativo:

Ventajas :

  • Puede agregar módulos nativos escritos en Java / Objective-C (probablemente el único pero el más fuerte)

desventajas :

  • Necesita Android Studio y XCode para ejecutar los proyectos
  • No puedes desarrollar para iOS sin tener una Mac
  • El dispositivo debe estar conectado a través de USB para usarlo para las pruebas
  • Las fuentes deben importarse manualmente en XCode
  • Si desea compartir la aplicación, debe enviar todo el archivo .apk / .ipa
  • No proporciona API JS listas para usar, por ejemplo, notificaciones push, Asset Manager, deben instalarse manualmente y vincularse con npm, por ejemplo
  • Configurar un proyecto que funcione correctamente (incluida la configuración del dispositivo) es bastante complicado y puede llevar tiempo

Expo

Ventajas :

  • Configurar un proyecto es fácil y se puede hacer en minutos
  • Usted (y otras personas) pueden abrir el proyecto mientras trabaja en él.
  • Compartir la aplicación es fácil (a través de un código QR o un enlace), no tiene que enviar todo el archivo .apk o .ipa
  • No es necesario construir para ejecutar la aplicación
  • Integra algunas bibliotecas básicas en un proyecto estándar (Notificaciones Push, Asset Manager, ...)
  • Puede expulsarlo a ExpoKit e integrar código nativo continuando utilizando algunas de las funciones de Expo, pero no todas
  • Expo puede construir archivos .apk y .ipa (es posible la distribución a tiendas con Expo)

desventajas :

  • No puede agregar módulos nativos (probablemente un cambio de juego para algunos)
  • No puede usar bibliotecas que usan código nativo en Objective-C / Java
  • La aplicación estándar Hello World es de aproximadamente 25 MB (debido a las bibliotecas integradas)
  • Si desea utilizar: FaceDetector, ARKit o Payments, debe expulsarlo a ExpoKit
  • Expulsarlo a ExpoKit tiene una compensación de características de Expo, por ejemplo, no puede compartir a través de un código QR
  • Al expulsar a ExpoKit, está limitado a la versión nativa de reacción que es compatible con ExpoKit en ese momento
  • La depuración en ExpoKit (con módulos nativos) es mucho más complicada, ya que combina dos idiomas y bibliotecas diferentes (ya no hay soporte oficial de Expo)

Espero poder resumir los puntos más importantes. Por favor, siéntase libre de agregar puntos adicionales.

Fuentes: 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 (documentación oficial en general)

Benjamin Heinke
fuente
1
Otra desventaja importante de usar expo es el tamaño de la aplicación. El tamaño mínimo es de ~ 25 MB para aplicaciones de iOS y ~ 20 MB para aplicaciones de Android
Pratik Singhal
3
Esto ya se menciona como una desventaja de un proyecto de exposición: "La aplicación estándar Hello World es de unos 25 MB (debido a las bibliotecas integradas)"
Benjamin Heinke
1
Gracias @BenjaminHeinke por una imagen clara de las ventajas y desventajas. Ya estoy experimentando la desventaja n. ° 2 con nuestra decisión de adoptar expo para nuestra aplicación nativa de reacción. No podemos integrarnos con Appsee debido a esto. ¿No hay una solución para esto?
CoolDocMan
1
El dispositivo no tiene que estar conectado a USB para las pruebas, solo la primera compilación e instalación debe hacerse a través de USB. ¡Más tarde puedes usar Wi-Fi! Sin embargo, necesitará una recompilación si realiza cambios en nativo.
rszalski
28

La respuesta de Brent Vatne está bien, pero me gustaría agregar algunos detalles.


Expo expande la superficie API de React Native

React Native no le brinda todas las API de JS que necesita de forma inmediata, sino solo la mayoría de las características primitivas. Se espera que los desarrolladores de React Native utilicen Android Studio / XCode para vincular bibliotecas nativas adicionales. Expo tiene como objetivo mejorar RN y proporcionar toda la API JS que necesita para las necesidades más comunes. Básicamente es un conjunto de bibliotecas nativas de calidad bien definidas, ya empaquetadas en una sola biblioteca: ExpoKit. A veces, estas bibliotecas ya existen en el mundo RN y están integradas en ExpoKit.

También es importante tener en cuenta que el equipo de Expo no puede incluir todas las bibliotecas en ExpoKit (lo que puede crear cierta frustración) porque el tamaño de la aplicación hello world crecería, ya que enviaría una gran cantidad de API que no se utilizarían en la mayoría de las aplicaciones.

Expo ofrece actualizaciones JS por aire

Al igual que otros sistemas (CodePush ...), Expo proporciona un sistema para actualizar su aplicación de forma inalámbrica. Esto significa que carga su paquete JS en un CDN y las aplicaciones móviles descargarán automáticamente y usarán el nuevo JS en el próximo inicio (sin solicitar una publicación / revisión de las tiendas).

Expo proporciona una herramienta CLI para cargar / administrar los paquetes JS en su CDN. Para el desarrollo, también puede optar por convertirse en CDN y alojar el paquete JS en localhost. Y XDE es solo un contenedor visual en la CLI.

Expo ofrece un cliente genérico

El cliente de Expo es un cliente genérico que permite cargar cualquier aplicación que sea compatible con Expo. Todas las aplicaciones de Expo comparten exactamente el mismo tiempo de ejecución nativo (RN + ExpoKit), la única diferencia es el JS que les damos. Las aplicaciones de Expo que publica en las tiendas de aplicaciones tienen su URL de paquete JS codificada. El cliente Expo se crea de una manera específica para que pueda elegir desde qué url cargar el JS, escaneando un QRCode o proporcionando una url.

Tenga en cuenta que este cliente también puede cargar paquetes JS desde localhost y facilitar su experiencia de desarrollo: no necesita XCode o Android Studio, y se vuelve mucho más rápido ejecutar su primer Hello World en el teléfono (de horas a minutos). En realidad, puede desarrollar en un iPhone sin una Mac y la configuración tarda 2 minutos.

En realidad, dado que el SDK de Expo se puede actualizar, el cliente de Expo incluye una capa de compatibilidad para que pueda ejecutar las últimas 5 versiones del SDK.

Expo ofrece un servicio de construcción

Como todas las aplicaciones de Expo comparten el mismo código nativo, Expo puede crear fácilmente estas aplicaciones para usted. Han creado un servicio de compilación en la nube.

Lo principal que diferencia las 2 aplicaciones creadas por Expo es solo la url codificada en la que se supone que la aplicación debe descargar el paquete JS para ejecutar.

Expo hace algunas otras cosas por usted, como proporcionar una forma declarativa de configurar íconos de aplicaciones, orientaciones, permisos, claves de API, ayudarlo a configurar notificaciones push, aprovisionar perfiles ... muchas configuraciones deben codificarse en el momento de la creación de la aplicación y pueden No se puede cambiar por el aire.

Expo es reaccionar nativo lo que Phonegap es para Córdoba

React Native es similar a Cordova. No es la misma tecnología de visualización (nativa frente a vista web), pero ambas le permiten controlar las características nativas desde javascript, y ambas ofrecen un sistema de complementos para que los desarrolladores puedan agregar fácilmente nuevos enlaces JS / nativos.

PhoneGap es similar a Expo. Ambos intentan enriquecer la API sin procesar de la plataforma subyacente en la que están construidos con un conjunto predefinido de complementos nativos adicionales. PhoneGap también ofrece un servicio de compilación y tiene un cliente genérico que funciona siempre que use los complementos aprobados.

Conclusión

Como puede ver, Expo es un conjunto de herramientas. Al final, permite desarrollar, compartir y publicar fácilmente en las tiendas sus proyectos móviles. Es bastante similar a la experiencia PhoneGap (pero mucho mejor y menos confuso).

Definitivamente recomendaré Expo para cualquier nuevo proyecto greenfield React Native, excepto estos 2 casos:

  • Ya sabe que necesita API que no están disponibles en Expo y que no estarán disponibles pronto
  • Te importa mucho el tamaño de tu aplicación (HelloWorld es> 25mb debido al gran tamaño de ExpoKit, pero después de eso no aumenta mucho ya que es solo JS)
Sebastien Lorber
fuente
1
Estoy tratando de encontrar una lista de API's Expo no es compatible. Alguien sabe dónde encontrar esto?
ronnyrr
@ronnyrr Expo no es compatible con todo lo que no es JS y que no está incluido en RN sin procesar y ExpoKit. Hay una lista infinita de cosas que Expo no admite, porque es todo lo demás que no está en la lista finita de características que Expo admite. Lo que pides no puede existir.
Sebastien Lorber
2
@ronnyrr Creo que esto es lo que estás buscando: expo.canny.io es una lista de solicitudes de funciones que puedes ordenar por popularidad
Evan Bacon
26

Se explica en la documentación oficial de la Expo.

¿Cuál es la diferencia entre Expo y React Native?

Expo es como Rails para React Native. Hay muchas cosas configuradas para usted, por lo que es más rápido comenzar y seguir el camino correcto.

Con Expo, no necesitas Xcode o Android Studio. Simplemente escriba JavaScript utilizando el editor de texto con el que se sienta cómodo (Atom, vim, emacs, Sublime, VS Code, lo que quiera). Puede ejecutar XDE (nuestro software de escritorio) en Mac, Windows y Linux.

Estas son algunas de las cosas que Expo le ofrece de manera inmediata:

Soporte para iOS y Android

Puede usar aplicaciones escritas en Expo tanto en iOS como en Android de inmediato. No necesita pasar por un proceso de compilación separado para cada uno. Simplemente abra cualquier aplicación Expo en la aplicación Expo Client desde App Store en iOS o Android (o en un simulador o emulador en su computadora).

Notificaciones push

Las notificaciones push funcionan directamente desde iOS y Android, utilizando una única API unificada. No tiene que configurar APNS y GCM / FCM ni configurar ZeroPush ni nada de eso. Creemos que hemos hecho esto tan fácil como puede ser ahora.

Inicio de sesión en Facebook

Puede llevar mucho tiempo configurarlo usted mismo, pero debería poder hacerlo funcionar en 10 minutos o menos en Expo.

Actualización instantánea

Todas las aplicaciones de Expo se pueden actualizar en segundos simplemente haciendo clic en Publicar en XDE. No tienes que configurar nada; simplemente funciona de esta manera. Si no está usando Expo, usaría Microsoft Code Push o lanzaría su propia solución para este problema

Gestión de activos

Las imágenes, videos, fuentes, etc. se distribuyen dinámicamente a través de Internet con Expo. Esto significa que funcionan con actualizaciones instantáneas y se pueden cambiar sobre la marcha. El sistema de gestión de activos integrado en Expo se encarga de cargar todos los activos en su repositorio a un CDN para que se carguen rápidamente para cualquier persona.

Sin Expo, lo normal es agrupar sus activos en su aplicación, lo que significa que no puede cambiarlos. O tendría que administrar poner sus activos en un CDN o similar usted mismo.

Actualización más fácil a nuevas versiones de React Native

Hacemos nuevos lanzamientos de Expo cada pocas semanas. Puede quedarse con una versión anterior de React Native si lo desea, o actualizar a una nueva, sin preocuparse de reconstruir su aplicación binaria. Puede preocuparse por actualizar JavaScript en su propio tiempo.

Pero no hay módulos nativos ...

Lo más limitante de Expo es que no puede agregar sus propios módulos nativos sin desconectar y usar ExpoKit.

chicles
fuente
2
Estoy usando expo en Windows 8. Cómo generar código QR para que directamente ejecute mi aplicación en mi dispositivo.
Prasanna
1
No lo probé en Windows, pero creo que debe ser similar en cualquier sistema. El código QR se genera automáticamente en la Expo XDEconsola o en la exp startsalida del comando de la consola.
gumkins
1
$ prasanna A veces no ves un código QR porque no tienes tu teléfono y tu máquina de desarrollo en la misma red. Por ejemplo, si está trabajando en casa, asegúrese de que su teléfono esté en su red doméstica. Y etc ...
ccalvert
expo starttambién le mostrará una dirección IP en su host local desde donde puede acceder al código QR
Jordan Simba hace
7

EXPO CLI

pros: -

 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.

Contras:-

 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

Reaccionar Cli nativo

Pros: -

 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.

Contras:-

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.

Puede preferir cualquier enfoque según sus requisitos.

Atul Tiwari
fuente
2

Quisiera señalar aquí que Expo está usando una versión anterior de react 16.5 que le prohibiría usar la nueva función de ganchos. Si decide ir con Expo, tenga en cuenta ver los controles de su versión. Las versiones anteriores de say react-navigation deberán usarse con la versión 16.5 si obtiene errores extraños.

SMW
fuente
expo updatehace un muy buen trabajo al obtener las versiones compatibles para la mayoría de los paquetes administrados por Expo. En este momento, no creo que actualice React Navigation, pero esa biblioteca en realidad está patrocinada por Expo. Personalmente, rara vez me encuentro con problemas de compatibilidad entre React Navigation y Expo (creo que encontré un par de problemas al usar versiones beta). Sin embargo, es posible que vea más problemas de compatibilidad con paquetes no administrados por Expo.
Christian Juth
2

Las respuestas sobre las ventajas y desventajas de expo y react-native-cli están completas. Quiero mencionar otro punto como mi experiencia personal. Expo contiene muchos módulos por defecto en el proyecto y hace que sea más fácil trabajar con él. Pero tiene un gran problema en la fase de producción porque la versión construida androidy las iosversiones tienen un tamaño tan grande. Por ejemplo, si tiene una única página con un 'Hello World'el apktamaño del archivo sería de alrededor 19 MB. Tener un mismo proyecto en react-native-cli dará como resultado una aplicación con el tamaño de 6 MB.

Entonces, personalmente, no recomiendo usar expo si desea desarrollar una aplicación comercial.

Meisam Nazari
fuente
No creo que esta sea una razón suficientemente buena para que las aplicaciones de exposición no estén listas para la producción. Además esto ha sido explicado a fondo por las respuestas anteriores
Dawoodjee
1

He experimentado más de un año que funciona con la expo. Si el tamaño de la aplicación no es importante para usted, use Expo porque es fácil de implementar Map, Push más fácil que React-native pero al final del proyecto si desea publicar la aplicación en Google Play u otra tienda tiene un desafío para eliminar algunos permisos en su APK React-native, puede cambiar todo, pero para importar alguna biblioteca como la notificación push o el mapa también necesita algunos desafíos porque debe agregar estas bibliotecas manualmente para proyectos de Android e iOS

Amir Ardalan
fuente
-1

expo es una cadena de herramientas creada alrededor de React Native para ayudarlo a iniciar rápidamente una aplicación. Proporciona un conjunto de herramientas que simplifican el desarrollo y las pruebas de la aplicación React Native, la interfaz y los servicios que generalmente están disponibles en componentes React Native de terceros. Con Expo puede encontrarlos todos en el SDK de Expo.

Shivo'ham 0
fuente