В чем разница между Expo и React Native?

205

С сайта Экспо

Expo позволяет веб-разработчикам создавать действительно нативные приложения, которые работают как на iOS, так и на Android, написав их один раз только на JavaScript.

Разве это не то, что делает React Native? Какая разница?

Аврора
источник

Ответы:

209

Я работаю в Экспо!

Когда вы пишете код, Expoвы пишете React Nativeкод. Expoимеет две основные части:

1) expo-cli: инструмент разработчика для создания проектов, просмотра журналов, открытия на вашем устройстве, публикации и т. Д.

2) ExpoКлиент: приложение на вашем телефоне, которое позволяет вам открывать свои проекты, пока вы над ними работаете, без необходимости проходить через XCodeили Android Studio, а также позволяет другим людям просматривать их тоже! И если вы публикуете его через expo-cli, люди могут получить к нему доступ в любое время через Expoклиент на Android или на iOS, если вы вошли в ту же учетную запись, с которой он был опубликован. Наконец, мы также предоставляем возможность создавать автономные приложения, чтобы людям не приходилось Expoоткрывать его с помощью клиента, и вы можете распространять его в магазине приложений и магазине воспроизведения, если хотите.

Итак, Expoэто набор инструментов, построенных поверх / вокруг React Native. Эти инструменты зависят от одного ключевого убеждения, которого мы придерживаемся Expo: большинство приложений можно создавать без необходимости написания собственного кода, при условии, что у вас есть полный набор API-интерфейсов Javascript.

Это важно, потому что React Nativeвы всегда можете перейти к нативному коду. Иногда это невероятно полезно, но это обходится дорого: вам нужно отправлять людям свои двоичные файлы, если вы хотите, чтобы они тестировали их, кто-то в другой части света не может просто нажать на ссылку, чтобы открыть ее во время работы на нем, и вы не можете просто опубликовать его одним щелчком мыши, чтобы кто-то получил к нему доступ, как в браузере.

С Expo, мы предлагаем, чтобы попытаться избежать перехода к нативному коду, если вы можете. Как я упоминал выше, мы считаем, что при наличии полного набора API-интерфейсов Javascriptэто не должно быть необходимо для большинства приложений. Итак, мы стремимся предоставить этот всеобъемлющий набор API, а затем создать все удивительные инструменты, которые могут существовать в мире, где совместно используется собственная среда выполнения.

Тем не менее, если вы обнаружите, что вы полностью переключаетесь на нативный, вы можете использовать его ExpoKitдля продолжения использования нативных API, которые Expoдают вам тот же уровень контроля, что и в любом нативном проекте. « ExpoKitЭто библиотека Objective-C и Java, которая позволяет вам использовать Expoплатформу и ваш существующий Expoпроект как часть большого стандартного собственного проекта». Узнайте больше здесь.

brentvatne
источник
5
Msgstr "С помощью Exponent вы не можете перейти к собственному коду" Приятно знать, что вы НЕ ДОЛЖНЫ переходить к нативному коду, но что если вам нужно, почему Exponent помешает вам сделать это?
Отто
3
Ах, я вижу, как это было неясно. Таким образом, клиент Exponent является полностью открытым исходным кодом ( github.com/exponentjs/exponent ), что означает, что вы можете писать собственный код, если хотите, но тогда вы фактически просто рассматриваете библиотеки Exponent как набор собственных модулей в другом типичном React Native приложение. Это совершенно нормально и побудило нас открыть проект. Тем не менее, если вы хотите иметь возможность использовать наши инструменты (бинарный компоновщик приложения, клиент Exponent в магазине app / play для обмена тестовыми сборками, встроенными push-уведомлениями и т. Д.), То вы не можете писать собственный код.
Брентватне
на момент написания статьи Expo стала достаточно хороша благодаря интеграции полезных нативных плагинов. Тем не менее, им не хватает интеграции плагинов MAJOR для IAP, и без этого вы не сможете заработать на своем приложении !!! И вы спрашиваете, какой смысл делать приложение, если я не могу получать прибыль !!
Адам
98

Я попытался сделать резюме документации и ответов от сотрудников Экспо:

Реагировать на родной init:

Преимущества :

  • Вы можете добавить собственные модули, написанные на Java / Objective-C (вероятно, единственный, но самый сильный)

Недостатки :

  • Требуется Android Studio и XCode для запуска проектов
  • Вы не можете разрабатывать для iOS без Mac
  • Устройство должно быть подключено через USB, чтобы использовать его для тестирования
  • Шрифты необходимо импортировать вручную в XCode
  • Если вы хотите поделиться приложением, вам нужно отправить весь файл .apk / .ipa
  • Не предоставляет JS API из коробки, например Push-Notification, Asset Manager, их нужно устанавливать вручную и связывать с npm, например
  • Правильная настройка рабочего проекта (включая настройку устройства) довольно сложна и может занять время

Экспо

Преимущества :

  • Настройка проекта проста и может быть выполнена за несколько минут
  • Вы (и другие люди) можете открыть проект, пока вы над ним работаете
  • Поделиться приложением просто (через QR-код или ссылку), вам не нужно отправлять весь файл .apk или .ipa
  • Не требуется сборка для запуска приложения
  • Интегрирует некоторые базовые библиотеки в стандартный проект (Push-уведомления, Asset Manager, ...)
  • Вы можете извлечь его из ExpoKit и интегрировать собственный код, продолжая использовать некоторые функции Expo, но не все
  • Expo может создавать файлы .apk и .ipa (возможно распространение в магазины с помощью Expo)

Недостатки :

  • Вы не можете добавлять нативные модули (возможно, для некоторых из них)
  • Вы не можете использовать библиотеки, которые используют собственный код в Objective-C / Java
  • Стандартное приложение Hello World размером около 25 МБ (из-за встроенных библиотек)
  • Если вы хотите использовать: FaceDetector, ARKit или Payments, вам нужно извлечь его в ExpoKit
  • Извлечение его в ExpoKit имеет компромисс между функциями Expo, например, вы не можете поделиться через QR-код
  • При извлечении в ExpoKit вы ограничены исходной версией реакции, которая поддерживается ExpoKit в данный момент времени.
  • Отладка в ExpoKit (с нативными модулями) намного сложнее, поскольку в нем смешаны два языка и разные библиотеки (больше нет официальной поддержки Expo)

Я надеюсь, что смог бы подвести итог наиболее важных моментов. Пожалуйста, не стесняйтесь добавлять дополнительные очки.

Источники: 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 (официальная документация в целом)

Бенджамин Хайнке
источник
1
Спасибо @BenjaminHeinke за ясную картину преимуществ и недостатков. Я уже испытываю неудобство №2 с нашим решением принять выставку для нашего собственного приложения. Из-за этого мы не можем интегрироваться с Appsee. Существует ли обходной путь для этого?
CoolDocMan
2
Устройство не должно быть подключено к USB для тестов, только первая компиляция и установка должны быть выполнены через USB. Позже вы можете использовать Wi-Fi! Потребуется перекомпиляция, если вы внесете изменения в нативный.
rszalski
30

Ответ Брента Ватне в порядке, но я хотел бы добавить некоторые детали.


Expo расширяет API поверхность React Native

React Native не предоставляет вам все необходимые API-интерфейсы JS, а только большинство примитивных функций. Ожидается, что разработчики React Native будут использовать Android Studio / XCode для связывания дополнительных нативных библиотек. Expo направлена ​​на улучшение RN и предоставление всего JS API, необходимого для наиболее распространенных потребностей. В основном это набор четко определенных качественных нативных библиотек, которые уже упакованы для вас в одну библиотеку: ExpoKit. Иногда эти библиотеки уже существуют в мире RN и интегрированы в ExpoKit.

Также важно отметить, что команда Expo не может включать каждую библиотеку в ExpoKit (что может вызвать некоторое разочарование), потому что размер приложения hello world будет расти, так как он будет поставлять много API, которые не будут использоваться в большинстве приложений.

Экспо предоставляет беспроводные обновления JS

Как и другие системы (CodePush ...), Expo предоставляет систему для обновления вашего приложения по беспроводной сети. Это означает, что вы загружаете свой пакет JS в CDN, и мобильные приложения автоматически загружают и используют новый JS при следующем запуске (без запроса публикации / обзора в магазинах).

Expo предоставляет инструмент CLI для загрузки / управления пакетами JS на их CDN. Для разработки вы также можете стать CDN и разместить JS-пакет на localhost. А XDE - это просто визуальная оболочка в CLI.

Expo предоставляет общего клиента

Клиент Expo - это общий клиент, который позволяет загружать любое приложение, совместимое с Expo. Все приложения Expo имеют одинаковую встроенную среду выполнения (RN + ExpoKit), единственное отличие заключается в том, что мы предоставляем им JS. Приложения Expo, которые вы публикуете в магазинах приложений, содержат в себе URL-адрес вашего пакета JS. Клиент Expo построен особым образом, так что вы можете выбрать, из какого URL загружать JS, отсканировав QRCode или предоставив URL.

Обратите внимание, что этот клиент также может загружать пакеты JS с локального хоста и упростить процесс разработки: нет необходимости в XCode или Android Studio, и он намного быстрее запускает ваш первый Hello World на телефоне (от часов до минут). Вы можете разрабатывать на iPhone без Mac, и установка занимает 2 минуты.

Фактически, так как Expo SDK можно обновить, клиент Expo включает слой совместимости, чтобы он мог запускать последние 5 версий SDK.

Экспо предоставляет услуги по сборке

Поскольку все приложения Expo имеют один и тот же собственный код, Expo может легко создать эти приложения для вас. Они создали сервис облачной сборки.

Главное, что отличает 2 приложения, созданные Expo, - это просто жестко заданный URL-адрес, по которому приложение должно загружать пакет JS для запуска.

Expo делает для вас некоторые другие вещи, такие как предоставление декларативного способа настройки значков приложений, ориентаций, разрешений, ключей API, помощь в настройке push-уведомлений, предоставление профилей ... многие параметры должны быть жестко заданы во время сборки в приложении и могут не может быть изменено по воздуху.

Экспо, чтобы Реагировать Native, что Phonegap является для Кордовы

React Native похож на Cordova. Это не та же технология представления (нативная или веб-версия), но обе позволяют управлять нативными функциями из javascript, и обе предлагают систему плагинов, так что разработчики могут легко добавлять новые JS / нативные привязки.

ФИЛЬМЫ ПОХОЖИЕ НА Expo Они оба пытаются обогатить сырой API базовой платформы, на которой они построены, с помощью предопределенного набора дополнительных собственных плагинов. PhoneGap также предлагает сервис сборки и имеет универсальный клиент, который работает, пока вы используете утвержденные плагины.

Вывод

Как видите, Expo - это набор инструментов. В конце это позволяет легко разрабатывать, делиться и публиковать в магазинах ваши мобильные проекты. Это очень похоже на опыт PhoneGap (но намного лучше и менее запутанным).

Я определенно буду рекомендовать Экспо для любого нового проекта React Native, кроме этих двух случаев:

  • Вы уже знаете, что вам нужны API, которые не доступны в Экспо и не будут в ближайшее время
  • Вы очень заботитесь о размере вашего приложения (HelloWorld составляет> 25 МБ из-за большого размера ExpoKit, но после этого он не сильно увеличивается, поскольку это просто JS)
Себастьян Лорбер
источник
1
Я пытаюсь найти список API Экспо не поддерживает. Кто-нибудь знает, где это найти?
ronnyrr
@ronnyrr Expo не поддерживает все, что не является JS и не входит в RN и ExpoKit. Существует бесконечный список вещей, которые Expo не поддерживает, потому что это все остальное, чего нет в конечном списке функций, которые Expo поддерживает. То, о чем ты просишь, не может существовать.
Себастьян Лорбер
2
@ronnyrr Я думаю, это то, что вы ищете: expo.canny.io это список запросов функций, которые вы можете отсортировать по популярности
Эван Бэкон,
26

Это объясняется в официальной документации Экспо

В чем разница между Expo и React Native?

Экспо вроде как Rails для React Native. Множество вещей настроено для вас, так что быстрее начать и на правильном пути.

С Expo вам не нужен Xcode или Android Studio. Вы просто пишете JavaScript, используя любой текстовый редактор, который вам удобен (Atom, vim, emacs, Sublime, VS Code, что вам нравится). Вы можете запустить XDE (наше программное обеспечение для настольных компьютеров) на Mac, Windows и Linux.

Вот некоторые из вещей, которые Expo дает вам из коробки, которые работают сразу:

Поддержка iOS и Android

Вы можете использовать приложения, написанные в Expo, на iOS и Android прямо из коробки. Вам не нужно проходить отдельный процесс сборки для каждого. Просто откройте любое приложение Expo в приложении Expo Client из App Store на iOS или Android (или в симуляторе или эмуляторе на вашем компьютере).

Всплывающее уведомление

Push-уведомления работают прямо из коробки на iOS и Android, используя единый унифицированный API. Вам не нужно настраивать APNS и GCM / FCM или настраивать ZeroPush или что-либо подобное. Мы думаем, что сделали это настолько просто, насколько это возможно прямо сейчас.

Логин в фейсбук

Это может занять много времени, чтобы правильно настроить себя, но вы должны быть в состоянии заставить его работать через 10 минут или меньше на Экспо.

Мгновенное обновление

Все приложения Expo могут быть обновлены в считанные секунды, просто нажав «Опубликовать в XDE». Вам не нужно ничего настраивать; это просто работает таким образом. Если вы не используете Expo, вы бы либо использовали Microsoft Code Push, либо предложите свое решение для этой проблемы.

Управление активами

Изображения, видео, шрифты и т. Д. Динамически распространяются через Интернет вместе с Expo. Это означает, что они работают с мгновенным обновлением и могут быть изменены на лету. Встроенная в Expo система управления активами обеспечивает загрузку всех активов в вашем репо в CDN, чтобы они быстро загружались для всех.

Без Expo обычным делом является объединение ваших активов в ваше приложение, что означает, что вы не можете их изменить. Или вам придется управлять размещением своих активов на CDN или подобном самостоятельно.

Более простое обновление до новых версий React Native

Мы делаем новые выпуски Экспо каждые несколько недель. Вы можете использовать старую версию React Native, если хотите, или перейти на новую, не беспокоясь о перестройке бинарного файла приложения. Вы можете беспокоиться об обновлении JavaScript в свое время.

Но нет родных модулей ...

Самое ограниченное в Expo - то, что вы не можете добавлять свои собственные нативные модули, не отключая и не используя ExpoKit.

gumkins
источник
2
Я использую экспо в Windows 8. Как сгенерировать QR-код, чтобы непосредственно я запустил мое приложение на моем устройстве.
Прасанна
1
Я не пробовал это на Windows, но я думаю, что это должно быть похоже на любую систему. QR-код генерируется автоматически либо в Expo XDEконсоли, либо в exp startвыводе команды консоли.
gumkins
1
$ prasanna Иногда вы не видите QR-код, потому что у вас нет телефона и компьютера для разработки в одной сети. Например, если вы работаете дома, убедитесь, что ваш телефон подключен к домашней сети. И т. Д.
ccalvert
expo startтакже покажет вам IP-адрес вашего локального хоста, с которого вы можете получить доступ к QR-коду
Джордан Симба
7

EXPO CLI

плюсы: -

 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.

Минусы: -

 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

Реагируй Родной Кли

Плюсы: -

 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.

Минусы: -

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.

Вы можете предпочесть любой подход в соответствии с вашими требованиями.

Атул Тивари
источник
2

Я хотел бы отметить, что Expo использует более старую версию реакции 16.5, которая запрещает вам использовать новую функцию хуков. Если вы решили пойти с Экспо, будьте внимательны и следите за своими версиями контроля. Старые версии скажем, что реагируют на навигацию, нужно будет использовать с версией 16.5, если вы получаете странные ошибки.

SMW
источник
expo updateдовольно хорошо работает над получением совместимых версий для большинства пакетов, управляемых Expo. На данный момент, я не думаю, что это обновляет React Navigation, но эта библиотека на самом деле спонсируется Expo. Лично я редко сталкиваюсь с проблемами совместимости между React Navigation и Expo (я думаю, что столкнулся с парой проблем при использовании бета-версий). Однако вы можете увидеть больше проблем совместимости с пакетами, не управляемыми Expo.
Кристиан Джут
2

Ответы о достоинствах и недостатках выставок и реактивов-native-cli полны. Я хочу упомянуть еще один момент в качестве моего личного опыта. Экспо по умолчанию содержит много модулей в проекте, что облегчает работу с ним. Но у него есть большая проблема на этапе производства, потому что сборка androidи iosверсии имеют такой большой размер. Для примера , если у вас есть одна страница с размер файла будет примерно . Наличие такого же проекта в Reaction-native-Cli приведет к созданию приложения с размером .'Hello World'apk19 MB6 MB

Поэтому лично я не рекомендую использовать expo, если вы хотите разработать коммерческое приложение.

Мейсам Назари
источник
Я не думаю, что это достаточно веская причина для того, чтобы выставочные приложения не были готовы к работе. Кроме того, это было подробно объяснено предыдущими ответами
Давуджи
1

Я уже больше года работаю с expo. Если размер приложения не важен для вас, вы используете Expo, потому что легко реализовать Map, Push проще, чем React-native, но в конце проекта, если вы хотите опубликовать В приложении Google Play или в другом магазине у вас есть задача удалить некоторые разрешения в вашем APK React-native. Вы можете изменить все, но для импорта некоторой библиотеки, например push-уведомлений или карты, тоже нужно выполнить некоторые задачи, потому что вы должны вручную добавить эти библиотеки в проекты для Android и iOS

Амир Ардалан
источник
-1

expo - это набор инструментов, созданный на основе React Native, чтобы помочь вам быстро запустить приложение. Он предоставляет набор инструментов, которые упрощают разработку и тестирование приложения и интерфейса React Native, а также интерфейсов и сервисов, которые обычно доступны в сторонних собственных компонентах React Native. С Expo вы можете найти их все в Expo SDK.

Shivo'ham 0
источник