В чем разница между Expo и React Native?
Expo позволяет веб-разработчикам создавать действительно нативные приложения, которые работают как на iOS, так и на Android, написав их один раз только на JavaScript.
Разве это не то, что делает React Native? Какая разница?
13 ответов
Я работаю в Экспо!
Когда вы пишете код в 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
проект как часть более крупного стандартного собственного проекта. " Подробнее здесь.
Я попытался сделать резюме документации и ответов от сотрудников Экспо:
Реагировать на родной 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 o Платежи, вам нужно вывести их в 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 https://docs.expo.io/versions/latest/guides/detach.html (официальная документация в целом)
Ответ Брента Ватне в порядке, но я хотел бы добавить некоторые детали.
Expo расширяет API поверхность React Native
React Native не предоставляет вам все необходимые API-интерфейсы JS, а только большинство примитивных функций. Ожидается, что разработчики React Native будут использовать Android Studio / XCode для связывания дополнительных нативных библиотек. Expo направлена на улучшение RN и предоставление всего JS API, необходимого для наиболее распространенных потребностей. В основном это набор четко определенных качественных нативных библиотек, которые уже упакованы для вас в одну библиотеку: ExpoKit. Иногда эти библиотеки уже существуют в мире RN и интегрированы в ExpoKit.
Также важно отметить, что команда Экспо не может включить каждую библиотеку в 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)
Это объясняется в официальной документации Экспо
В чем разница между 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.
Преимущества EXPO CLI:- 1. Не нужно устанавливать Android studio и Xcode, чтобы начать создавать мобильное приложение. 2. Нет необходимости в высокой конфигурации машины для разработки. 3. Мобильный интерфейс легко проверить на устройствах Android и Iphone с помощью сканирования штрих-кодов. И некоторое время вы можете проверить на онлайн-симуляторы iPhone и Android. 4. быстрое развитие. Минусы:- 1. Нативная зависимость не может быть добавлена на expo, потому что в проекте expo нет папок ios и android, поэтому здесь expo ограничена. 2. Делать apk и ipa сложно с помощью expo.Реагируй Родной Кли
Плюсы:- 1. Легко добавить нативную зависимость для Android и IOS, потому что эта структура проекта имеет папки IOS и Android. 2. Создание apk и ipa сборок проще, чем экспо. Примечание ":- React Native - это правильный подход к началу работы над реагировать на собственную платформу. Минусы: - Требуется машина с высокой конфигурацией. 2. Добавление зависимости иногда сложнее, но хорошо. 3. Требуются базовые знания структуры папок android и Структура папок IOS, но из этого узнайте больше вещей.
Вы можете предпочесть любой подход в соответствии с вашими требованиями.
Ответы о преимуществах и недостатках expo и response-native-cli полны. Я хочу упомянуть еще один момент в качестве моего личного опыта. Экспо по умолчанию содержит много модулей в проекте, что облегчает работу с ним. Но это имеет большую проблему на этапе производства, потому что построенный android
а также ios
версии имеют такой большой размер. Например, если у вас есть одна страница с 'Hello World'
apk
размер файла будет около 19 MB
, Наличие того же проекта в Reaction-native-Cli приведет к созданию приложения с размером 6 MB
,
Поэтому лично я не рекомендую использовать expo, если вы хотите разработать коммерческое приложение.
Expo - это оболочка для react native cli, которая делает что-то под капотом для удобства разработчиков, наиболее распространенную проблему, которую expo решает, этому разработчику не нужно беспокоиться о проблемах связывания библиотек, которые часто возникают в react native cli. Expo предлагает множество библиотек, которые чрезвычайно полезны для надежной разработки. Одним из преимуществ expo является то, что вы можете разрабатывать приложение для Android и iOS без Mac через мобильное приложение Expo.
Поскольку он имеет массу преимуществ, у использования expo есть некоторые недостатки.
- Размер приложения увеличивается как ад. Размер приложения Simple Hello World> 30 МБ
- Иногда, когда вам нужно реализовать некоторые встроенные функции в своем приложении, вам нужно будет выйти из expo и вернуться, чтобы отреагировать на собственный cli. И вы никогда не сможете вернуть его обратно к expo cli.
Я хотел бы отметить, что Expo использует более старую версию реакции 16.5, которая запрещает вам использовать новую функцию хуков. Если вы решили пойти с Экспо, будьте внимательны и следите за своими версиями контроля. Более старые версии, например, реагируют на навигацию, необходимо использовать с версией 16.5, если вы получаете странные ошибки.
У меня более года опыта работы с expo. Если размер приложения не важен для вас, вы используете Expo, потому что его легко реализовать, Map, Push проще, чем React-native, но в конце проекта, если вы хотите опубликовать приложение в Google Play или другом магазине, у вас есть проблема с удалением некоторых разрешений в вашем APK React-native, вы можете изменить все, но для импорта некоторой библиотеки, такой как push-уведомление или карта, тоже потребуются некоторые проблемы, потому что вам нужно добавить эти библиотеки вручную в проекты для Android и iOS
Краткое изложение документации и ответы сотрудников Экспо:
Инициализация React Native: преимущества
Вы можете добавить нативные модули, написанные на Java или Objective-C (вероятно, единственный, но самый сильный)
Недостатки Требуется Android Studio и Xcode для запуска проектов Вы не можете разрабатывать для iOS без Mac Устройство должно быть подключено через USB, чтобы использовать его для тестирования Шрифты необходимо импортировать вручную в Xcode Если вы хотите поделиться нужным приложением для отправки всего файла .apk / .ipa. Не предоставляет API JavaScript из коробки, например, Push-уведомления, Asset Manager, их необходимо установить вручную и связать, например, с npm. Правильная настройка рабочего проекта (включая устройство конфигурация) довольно сложна и может занять время
Преимущества выставки
Настройка проекта проста и может быть выполнена за считанные минуты Вы (и другие люди) можете открыть проект, пока работаете над ним Делиться приложением легко (с помощью QR-кода или ссылки), вам не нужно отправлять весь файл .apk или .ipa Для запуска приложения сборка не требуется Интеграция некоторых базовых библиотек в стандартный проект (Push-уведомления, Asset Manager и т. д.) Вы можете извлечь его в ExpoKit и интегрировать собственный код, продолжая использовать некоторые функции Expo , но не все из них Expo могут собирать файлы .apk и .ipa (распространение в магазины возможно с помощью Expo)
Недостатки Вы не можете добавлять нативные модули (вероятно, это изменит правила игры для некоторых) Вы не можете использовать библиотеки, использующие нативный код в Objective-C/Java Стандартное приложение Hello World имеет размер около 25 МБ (из-за встроенных библиотек) Если вы вы хотите использовать: FaceDetector, ARKit или платежи, которые вам нужно извлечь в ExpoKit. Извлечение в ExpoKit имеет компромисс между функциями Expo, например, вы не можете поделиться с помощью QR-кода. нативная версия, поддерживаемая ExpoKit, тогда отладка в ExpoKit (с нативными модулями) намного сложнее, поскольку она смешивает два языка и разные библиотеки (официальная поддержка Expo больше не поддерживается)
Expo - это набор инструментов, созданный на основе React Native, чтобы помочь вам быстро запустить приложение. Он предоставляет набор инструментов, упрощающих разработку и тестирование приложения и интерфейса React Native, а также интерфейсов и сервисов, которые обычно доступны в сторонних собственных компонентах React Native. С Expo вы можете найти их все в Expo SDK.
React Native CLI
React Native CLI — это встроенная функция, которая помогает вам контролировать управление проектом локально. Вы можете создавать и запускать свои приложения. Вы можете создать проект, просто используя эту команду.
npx react-native init <ProjectName>
Чтобы запустить проект, вы можете выполнить следующие команды.
cd <Project Name> // or open via directory
// For Android
npx react-native run-android
// For IOS
npx react-native run-ios
Экспо
Expo [https://docs.expo.dev/] CLI построен на основе React Native и это самый быстрый способ настроить проект React Native в масштабе! Вы просто создаете проект и начинаете кодировать. Вы можете установить Expo CLI глобально через npm:
// install expo-cli globally
npm install -g expo-cli
Создать и запустить приложение React Native с помощью Expo так же просто, как:
// create a project
expo init <Project Name>
cd <Project Name>
npm start # you can also use: expo start
Вердикт React Native
React Native рекомендует использовать React Native CLI, если вы уже знакомы с разработкой мобильных приложений. Однако, если вы новичок в разработке мобильных приложений и хотите быстро настроить проект, рекомендуется использовать Expo CLI.
Заключение
Итак, это сравнение Expo CLI и ReactNative.
Учитывая детальное сравнение преимуществ и ограничений обеих платформ, я бы предложил просмотреть требования и выбрать, какая из них больше всего подходит для вашего приложения.
Expo и React Native — два популярных инструмента для создания мобильных приложений, но у них есть некоторые отличия.Expo — это бесплатная платформа с открытым исходным кодом, которая позволяет разработчикам быстро создавать приложения с помощью JavaScript и React Native. Он предоставляет набор инструментов, библиотек и сервисов, упрощающих начало работы над созданием мобильного приложения. React Native, с другой стороны, представляет собой фреймворк для создания мобильных приложений с использованием React. React Native обеспечивает более прямой доступ к собственным API и компонентам, а также позволяет настраивать и контролировать процесс разработки приложений. Таким образом, Expo предоставляет более быстрый и простой способ начать создание мобильного приложения, а React Native обеспечивает больший контроль и настройку.
Еще одно различие между Expo и React Native — это процесс развертывания. С Expo вы можете опубликовать свое приложение прямо в магазинах приложений всего за несколько кликов. Вы также можете воспользоваться другими услугами, предоставляемыми Expo, такими как push-уведомления и аутентификация. С другой стороны, при создании приложения React Native вам потребуется использовать такие инструменты, как Xcode или Android Studio, для компиляции и упаковки приложения для развертывания. Кроме того, вам придется самостоятельно заниматься процессом распространения, который может занимать много времени и быть сложным.
С точки зрения производительности React Native обычно имеет лучшую производительность по сравнению с Expo, поскольку имеет прямой доступ к собственным API и компонентам, тогда как Expo полагается на свой SDK. Однако во многих случаях разница в производительности может быть незначительной.
В заключение, и у Expo, и у React Native есть свои плюсы и минусы, и выбор между ними зависит от конкретных требований и целей вашего проекта.Если вы только начинаете разработку мобильных приложений и хотите быстро и легко начать работу, Expo — отличный вариант. Однако, если вы хотите большего контроля и настройки, React Native может быть лучшим выбором.