Qual é a diferença entre Expo e React Native?

Respostas:

206

Eu trabalho na Expo!

Quando você escreve código, Expovocê escreve React Nativecódigo. Expotem duas peças principais:

1) expo-cli: uma ferramenta de desenvolvedor para criar projetos, visualizar logs, abrir no seu dispositivo, publicar etc.

2) O Expocliente: um aplicativo no seu telefone que permite abrir seus projetos enquanto você trabalha neles, sem precisar passar por XCodeou Android Studio, e também permite que outras pessoas os vejam! E se você publicá-lo expo-cli, as pessoas poderão acessá-lo a qualquer momento através do Expocliente no Android ou no iOS se tiver feito login na mesma conta com a qual foi publicado. Por fim, também possibilitamos criar aplicativos independentes para que as pessoas não precisem usar o Expocliente para abri-lo, e você pode distribuir para a loja de aplicativos e loja de jogos, se quiser.

Portanto, Expoé um conjunto de ferramentas criadas em cima / ao redor React Native. Essas ferramentas dependem de uma das principais crenças em que mantemos Expo: é possível criar a maioria dos aplicativos sem precisar escrever código nativo, desde que você tenha um conjunto abrangente de APIs expostas Javascript.

Isso é importante porque React Nativevocê sempre pode usar o código nativo. Às vezes, isso é incrivelmente útil, mas tem um custo: você precisa enviar seus binários às pessoas, se quiser que eles as testem, alguém do outro lado do mundo não pode simplesmente tocar em um link para abri-lo enquanto estiver trabalhando nele e você não pode simplesmente publicá-lo com um clique para alguém acessá-lo da mesma forma que faria em um navegador.

Com Expo, sugerimos que tente evitar o código nativo, se puder. Como mencionei acima, acreditamos que, com um conjunto abrangente de APIs disponíveis Javascript, isso não deve ser necessário para a maioria dos aplicativos. Portanto, nosso objetivo é fornecer esse conjunto abrangente de APIs e criar todas as ferramentas impressionantes que podem existir em um mundo em que o tempo de execução nativo é compartilhado.

No entanto, se você achar que é absolutamente suspenso para nativo, poderá ExpoKitcontinuar usando as APIs nativas que Expooferecem o mesmo nível de controle que em qualquer projeto nativo. " ExpoKité uma biblioteca Objective-C e Java que permite que você use a Expoplataforma e seu Expoprojeto existente como parte de um projeto nativo padrão maior." Leia mais aqui.

Brentvatne
fonte
4
"Com o expoente, você não pode descer para o código nativo". É bom saber que você não precisa usar o código nativo, mas e se você precisar, por que o Exponent o impediria de fazer isso?
Otto
3
Ah, eu posso ver como isso não ficou claro. Portanto, o cliente Exponent é completamente de código aberto ( github.com/exponentjs/exponent ), o que significa que você pode escrever código nativo se desejar, mas efetivamente está tratando as bibliotecas Exponent como uma coleção de módulos nativos em um React Native típico aplicativo. Isso é ótimo e foi um motivador para abrirmos o projeto de código-fonte. Dito isso, se você quiser usar nossas ferramentas (construtor binário de aplicativo, cliente Exponent na loja de aplicativos / jogos para compartilhar construções de teste, notificações push embutidas etc.), não poderá escrever código nativo.
Brentvatne
Até o momento, a Expo ficou muito boa com a integração de plugins nativos úteis. No entanto, eles não possuem uma integração de plugins MAJOR para IAP e, sem ele, você não pode ganhar dinheiro com seu aplicativo !!! E você pergunta: qual é o sentido de criar um aplicativo se eu não posso obter lucro!
Adam
96

Tentei fazer um resumo da documentação e respostas dos funcionários da Expo:

React init nativo:

Vantagens :

  • Você pode adicionar módulos nativos escritos em Java / Objective-C (provavelmente o único, mas o mais forte)

Desvantagens :

  • Precisa do Android Studio e XCode para executar os projetos
  • Você não pode desenvolver para iOS sem ter um Mac
  • O dispositivo deve ser conectado via USB para usá-lo para teste
  • As fontes precisam ser importadas manualmente no XCode
  • Se você quiser compartilhar o aplicativo, precisará enviar o arquivo .apk / .ipa inteiro
  • Não fornece APIs JS prontas para uso, por exemplo, Push-Notifications, Asset Manager, elas precisam ser instaladas manualmente e vinculadas ao npm, por exemplo
  • Configurar um projeto funcionando corretamente (incluindo a configuração do dispositivo) é bastante complicado e pode levar tempo

Expo

Vantagens :

  • A configuração de um projeto é fácil e pode ser feita em minutos
  • Você (e outras pessoas) podem abrir o projeto enquanto estiver trabalhando nele
  • Compartilhar o aplicativo é fácil (via código QR ou link), você não precisa enviar o arquivo .apk ou .ipa inteiro
  • Nenhuma compilação necessária para executar o aplicativo
  • Integra algumas bibliotecas básicas em um projeto padrão (Push Notifications, Asset Manager, ...)
  • Você pode ejetar o ExpoKit e integrar o código nativo continuando usando alguns dos recursos do Expo, mas nem todos
  • A Expo pode criar arquivos .apk e .ipa (distribuição possível para lojas com a Expo)

Desvantagens :

  • Você não pode adicionar módulos nativos (provavelmente um trocador de jogos para alguns)
  • Você não pode usar bibliotecas que usam código nativo no Objective-C / Java
  • O aplicativo Hello World padrão tem cerca de 25 MB de tamanho (por causa das bibliotecas integradas)
  • Se você deseja usar: FaceDetector, ARKit ou Payments, é necessário ejetar o ExpoKit
  • A injeção no ExpoKit tem uma troca de recursos do Expo, por exemplo, você não pode compartilhar via QR code
  • Ao ejetar para o ExpoKit, você fica limitado à versão nativa de reação suportada pelo ExpoKit naquele momento
  • A depuração no ExpoKit (com módulos nativos) é muito mais complicada, pois mistura duas linguagens e bibliotecas diferentes (não há mais suporte oficial da Expo)

Espero poder resumir os pontos mais importantes. Por favor, sinta-se livre para adicionar pontos adicionais.

Fontes: 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 (documentação oficial em geral)

Benjamin Heinke
fonte
1
Outra grande desvantagem do uso de expo é o tamanho do aplicativo. O tamanho mínimo é de ~ 25 MB para aplicativos iOS e ~ 20 MB para aplicativos Android
Pratik Singhal
3
Isso já é mencionado como desvantagem de um projeto de exposição: "O aplicativo Hello World padrão tem cerca de 25 MB de tamanho (por causa das bibliotecas integradas)"
Benjamin Heinke
1
Obrigado @BenjaminHeinke por uma imagem clara das vantagens e desvantagens. Eu já estou enfrentando a desvantagem # 2 com a nossa decisão de adotar a expo para reagir ao aplicativo nativo. Não podemos nos integrar ao Appsee por causa disso. Não há solução alternativa para isso?
CoolDocMan
1
O dispositivo não precisa estar conectado ao USB para testes, apenas a primeira compilação e instalação devem ser feitas via USB. Mais tarde, você pode usar o Wi-Fi! Será necessário uma recompilação se você fizer alterações no nativo.
rszalski
28

A resposta de Brent Vatne é boa, mas eu gostaria de acrescentar alguns detalhes.


Expo expande a superfície API do React Native

O React Native não fornece todas as APIs JS necessárias, mas apenas os recursos mais primitivos. Reagir Os desenvolvedores nativos devem usar o Android Studio / XCode para vincular bibliotecas nativas adicionais. A Expo visa aprimorar o RN e fornecer toda a API JS necessária para as necessidades mais comuns. É basicamente um conjunto de bibliotecas nativas de qualidade bem definidas já empacotadas para você em uma única biblioteca: ExpoKit. Às vezes, essas bibliotecas já existem no mundo do RN e estão integradas ao ExpoKit.

Também é importante notar que a equipe da Expo não pode incluir todas as libs existentes no ExpoKit (o que pode causar alguma frustração) porque o tamanho do aplicativo Hello World aumentaria, pois enviaria muitas APIs que não seriam usadas na maioria dos aplicativos.

Expo fornece atualizações de JS no ar

Como outros sistemas (CodePush ...), a Expo fornece um sistema para atualizar seu aplicativo pelo ar. Isso significa que você carrega seu pacote JS em uma CDN e os aplicativos móveis baixam e usam automaticamente o novo JS na próxima inicialização (sem solicitar uma publicação / revisão das lojas).

A Expo fornece uma ferramenta CLI para fazer upload / gerenciar os pacotes configuráveis ​​JS em suas CDN. Para desenvolvimento, você também pode optar por se tornar o CDN e hospedar o pacote JS no localhost. E o XDE é apenas um invólucro visual na CLI.

Expo fornece um cliente genérico

O cliente Expo é um cliente genérico que permite carregar qualquer aplicativo compatível com o Expo. Todos os aplicativos da Expo compartilham exatamente o mesmo tempo de execução nativo (RN + ExpoKit), a única diferença é o JS que fornecemos a eles. Os aplicativos da Expo que você publica nas lojas de aplicativos têm seu URL do pacote JS embutido. O cliente Expo é construído de uma maneira específica para que você possa escolher de qual URL carregar o JS, digitalizando um QRCode ou fornecendo uma URL.

Observe que esse cliente também pode carregar pacotes JS do localhost e facilitar sua experiência de desenvolvimento: não há necessidade de XCode ou Android Studio, e fica muito mais rápido fazer o seu primeiro Hello World funcionar no telefone (de horas a minutos). Na verdade, você pode desenvolver em um iPhone sem Mac e a instalação leva 2 minutos.

Atualmente, como o Expo SDK pode ser atualizado, o cliente Expo inclui uma camada de compatibilidade para poder executar as últimas 5 versões do SDK.

Expo fornece um serviço de construção

Como todos os aplicativos da Expo compartilham o mesmo código nativo, a Expo pode criar esses aplicativos facilmente para você. Eles criaram um serviço de criação em nuvem.

A principal coisa que os dois aplicativos diferenciados criados pela Expo são apenas o URL codificado no qual o aplicativo deve baixar o pacote JS para execução.

A Expo faz outras coisas para você, como fornecer uma maneira declarativa de configurar ícones, orientações, permissões, chaves da API, ajudar a configurar notificações push, provisionar perfis ... muitas configurações precisam ser codificadas no momento da criação do aplicativo e podem não pode ser alterado no ar.

Expo é Reagir Native o que Phonegap é para Cordova

O React Native é semelhante ao Cordova. Não é a mesma tecnologia de visualização (nativa x visualização na web), mas ambas permitem controlar recursos nativos do javascript e oferecem um sistema de plugins para que os desenvolvedores possam adicionar facilmente novas ligações JS / nativas.

O PhoneGap é semelhante ao Expo. Ambos tentam enriquecer a API bruta da plataforma subjacente na qual são criados com um conjunto predefinido de plugins nativos adicionais. O PhoneGap também oferece um serviço de criação e possui um cliente genérico que funciona desde que você use os plug-ins aprovados.

Conclusão

Como você pode ver, a Expo é um conjunto de ferramentas. No final, ele permite desenvolver, compartilhar e publicar facilmente nas lojas seus projetos móveis. É bastante semelhante à experiência do PhoneGap (mas muito melhor e menos confusa).

Definitivamente recomendarei a Expo para qualquer novo projeto greenfield do React Native, exceto estes 2 casos:

  • Você já sabe que precisa de APIs que não estão disponíveis na Expo e não serão disponibilizadas tão cedo
  • Você se importa muito com o tamanho do seu aplicativo (o HelloWorld tem> 25mb devido ao grande tamanho do ExpoKit, mas depois disso não aumenta muito, pois é apenas JS)
Sebastien Lorber
fonte
1
Estou tentando encontrar uma lista da Expo da API que não oferece suporte. Alguém sabe onde encontrar isso?
ronnyrr
O @ronnyrr Expo não suporta tudo o que não é JS e não está incluído no RN bruto e no ExpoKit. Há uma lista infinita de coisas que a Expo não suporta, porque tudo o resto não está na lista finita de recursos que a Expo suporta. O que você pede não pode existir.
Sebastien Lorber 15/03
2
@ronnyrr Eu acho que isso é o que você está procurando: expo.canny.io é uma lista de solicitações de recursos que você pode classificar por popularidade
Evan Bacon
26

É explicado na documentação oficial da Expo

Qual é a diferença entre Expo e React Native?

Expo é como Rails para React Native. Muitas coisas estão configuradas para você, por isso é mais rápido começar e no caminho certo.

Com a Expo, você não precisa do Xcode ou do Android Studio. Você acabou de escrever JavaScript usando qualquer editor de texto com o qual se sinta confortável (Atom, vim, emacs, Sublime, VS Code, o que quiser). Você pode executar o XDE (nosso software de desktop) no Mac, Windows e Linux.

Aqui estão algumas das coisas que a Expo oferece imediatamente e que funcionam imediatamente:

Suporte para iOS e Android

Você pode usar aplicativos escritos na Expo no iOS e no Android imediatamente. Você não precisa passar por um processo de compilação separado para cada um. Basta abrir qualquer aplicativo Expo no aplicativo Expo Client da App Store no iOS ou Android (ou em um simulador ou emulador no seu computador).

Notificações via push

As notificações por push funcionam imediatamente no iOS e no Android, usando uma única API unificada. Você não precisa configurar o APNS e o GCM / FCM ou configurar o ZeroPush ou algo assim. Achamos que tornamos isso o mais fácil possível agora.

Entrar no Facebook

Isso pode levar um longo tempo para que você seja configurado adequadamente, mas você poderá fazê-lo funcionar em 10 minutos ou menos na Expo.

Atualização instantânea

Todos os aplicativos da Expo podem ser atualizados em segundos, basta clicar em Publicar no XDE. Você não precisa configurar nada; simplesmente funciona dessa maneira. Se você não estiver usando a Expo, use o Microsoft Code Push ou role sua própria solução para esse problema

Gestão de ativos

Imagens, vídeos, fontes etc. são distribuídos dinamicamente pela Internet com a Expo. Isso significa que eles trabalham com atualizações instantâneas e podem ser alterados rapidamente. O sistema de gerenciamento de ativos incorporado à Expo se encarrega de carregar todos os ativos em seu repositório em uma CDN para que eles sejam carregados rapidamente para qualquer pessoa.

Sem a Expo, o normal é agrupar seus ativos em seu aplicativo, o que significa que você não pode alterá-los. Ou você teria que gerenciar colocando seus ativos em uma CDN ou similar.

Atualização mais fácil para novas versões nativas do React

Fazemos novos lançamentos da Expo a cada poucas semanas. Você pode permanecer em uma versão antiga do React Native, se quiser, ou atualizar para uma nova, sem se preocupar em reconstruir o binário do aplicativo. Você pode se preocupar em atualizar o JavaScript no seu próprio tempo.

Mas nenhum módulo nativo ...

A coisa mais limitadora do Expo é que você não pode adicionar seus próprios módulos nativos sem desconectar e usar o ExpoKit.

gomas
fonte
2
estou usando o expo no windows 8. como gerar o código QR para que eu execute meu aplicativo diretamente no meu dispositivo.
Prasanna
1
Não tentei no Windows, mas acho que deve ser semelhante em qualquer sistema. O código QR é gerado automaticamente no Expo XDEconsole ou na exp startsaída do comando do console.
gumkins
1
$ prasanna Às vezes, você não vê um código QR porque não possui o telefone e a máquina de desenvolvimento na mesma rede. Por exemplo, se você estiver trabalhando em casa, verifique se o telefone está na sua rede doméstica. E etc ...
ccalvert
7

CLI EXPO

profissionais: -

 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

React Native Cli

Prós: -

 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.

Você pode preferir qualquer abordagem de acordo com seus requisitos.

Atul Tiwari
fonte
2

Anote aqui que a Expo está usando uma versão mais antiga do react 16.5, o que o proibiria de usar o novo recurso de ganchos. Se você optar por ir com a Expo, esteja atento a seus controles de versão. As versões mais antigas do say react-navigation precisarão ser usadas com a versão 16.5 se você estiver recebendo erros estranhos.

SMW
fonte
expo updatefaz um bom trabalho ao obter as versões compatíveis para a maioria dos pacotes gerenciados pela Expo. No momento, não acho que ele atualize o React Navigation, mas essa biblioteca é realmente patrocinada pela Expo. Pessoalmente, raramente encontro problemas de compatibilidade entre o React Navigation e o Expo (acho que encontrei alguns problemas ao usar versões beta). No entanto, você pode encontrar mais problemas de compatibilidade com pacotes não gerenciados pela Expo.
Christian Juth 12/04
2

As respostas sobre as vantagens e desvantagens de expo e react-native-cli estão completas. Quero mencionar outro ponto como minha experiência pessoal. A Expo contém muitos módulos por padrão no projeto e facilita o trabalho com ele. Mas há um grande problema na fase de produção, porque as versões construídas androide iosas têm um tamanho tão grande. Por exemplo, se você tiver uma única página com 'Hello World'o apktamanho do arquivo, aproximadamente 19 MB. Ter um mesmo projeto no react-native-cli resultará em um aplicativo com o tamanho de 6 MB.

Então, pessoalmente, eu não recomendo usar expo se você deseja desenvolver um aplicativo comercial.

Meisam Nazari
fonte
Não acho que esse seja um motivo suficientemente bom para os aplicativos expo não estarem prontos para produção. Além disso, foi completamente explicado por respostas anteriores
Dawoodjee
1

Eu experimentei mais de um ano que trabalha com expo Se o tamanho do aplicativo não for importante para você usar a Expo, porque é fácil implementar o Map, empurre mais facilmente do que o React-native, mas no final do projeto, se você deseja publicar aplicativo no Google Play ou em outra loja, você tem o desafio de remover algumas permissões no APK React-native, você pode alterar tudo, mas para importar algumas bibliotecas, como notificação por push ou o mapa, também precisa de alguns desafios, porque você precisa adicionar essas bibliotecas manualmente para projetos android e iOS

Amir Ardalan
fonte
-1

expo é uma cadeia de ferramentas criada em torno do React Native para ajudar você a iniciar rapidamente um aplicativo. Ele fornece um conjunto de ferramentas que simplificam o desenvolvimento e o teste do aplicativo React Native, da interface e dos serviços que normalmente estão disponíveis nos componentes React Native nativos de terceiros. Com a Expo, você pode encontrar todos eles no Expo SDK.

Shivo'ham 0
fonte