Do site da Expo
A Expo permite que os desenvolvedores da Web criem aplicativos realmente nativos que funcionem no iOS e no Android, escrevendo-os uma vez apenas em JavaScript.
Não é isso que o React Native faz? Qual é a diferença?
Do site da Expo
A Expo permite que os desenvolvedores da Web criem aplicativos realmente nativos que funcionem no iOS e no Android, escrevendo-os uma vez apenas em JavaScript.
Não é isso que o React Native faz? Qual é a diferença?
Respostas:
Eu trabalho na Expo!
Quando você escreve código, Expo
você escreve React Native
código. Expo
tem duas peças principais:
1) expo-cli
: uma ferramenta de desenvolvedor para criar projetos, visualizar logs, abrir no seu dispositivo, publicar etc.
2) O Expo
cliente: um aplicativo no seu telefone que permite abrir seus projetos enquanto você trabalha neles, sem precisar passar por XCode
ou 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 Expo
cliente 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 Expo
cliente 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 Native
você 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á ExpoKit
continuar usando as APIs nativas que Expo
oferecem o mesmo nível de controle que em qualquer projeto nativo. " ExpoKit
é uma biblioteca Objective-C e Java que permite que você use a Expo
plataforma e seu Expo
projeto existente como parte de um projeto nativo padrão maior." Leia mais aqui.
Tentei fazer um resumo da documentação e respostas dos funcionários da Expo:
React init nativo:
Vantagens :
Desvantagens :
Expo
Vantagens :
Desvantagens :
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)
A resposta de Brent Vatne é boa, mas eu gostaria de acrescentar alguns detalhes.
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.
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.
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.
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.
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.
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:
É 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.
Expo XDE
console ou na exp start
saída do comando do console.
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.
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.
expo update
faz 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.
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 android
e ios
as têm um tamanho tão grande. Por exemplo, se você tiver uma única página com 'Hello World'
o apk
tamanho 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.
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
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.