Ознакомимый подход к поддержке нескольких платформ с REACT Native с использованием Yarn Workspaces Monorepo.
Проверьте запуск React Native повсюду для подробного руководства о том, как и почему я рекомендую попробовать этот подход, если вы планируете поддержать несколько платформ в вашем приложении.

Этот MonorePo использует рабочие пространства пряжи и TypeScript для поддержки модульного нативного проекта React.
Основная идея состоит в том, чтобы выделить код приложения JavaScript из конфигураций платформы (натуральный код + приложения, такие как Metro и WebPack).
Эта изоляция происходит с использованием различных рабочих пространств: у нас есть рабочее пространство app для кода приложения Javascript, mobile рабочее пространство для нативной конфигурации мобильной связи React, рабочее пространство macos для нативной конфигурации MacOS React и так далее.
Мы полностью используем nohoist чтобы позволить использовать различные версии Rayact Native на каждой платформе (которая рекомендуется, но не требуется), упрощая принятие новых нативных обновлений React.
Спасибо Nohoist, каждая платформа Workspace ( mobile , macos и т. Д.) Может зависеть от любой нативной версии React, независимо от того, какую версию использует другие рабочие пространства платформы. Например, мы можем использовать [email protected] в мобильном приложении и [email protected] в приложении MacOS-до тех пор, пока код приложения JavaScript поддерживает обе версии.
Этот подход способствует постепенному реагированию нативных обновлений по поводу обновлений в Lockstep.
Для получения более подробной информации ознакомьтесь с «Запуск RACE Native Anywhere: пряжа рабочие пространства Monorepo Setup».
️ Пожалуйста, обратите внимание, что я не говорю, что это правильный способ сделать Native Monorepos. Это просто подход, который мне нравится использовать на более крупных кодовых базах :)
Вы можете использовать это репо в качестве шаблон, удаляя рабочие пространства платформ, которые вам не нужны, или вы можете создать эту настройку с нуля, если вы хотите полностью понять, как она работает.
[email protected]:mmazzarolo/react-native-universal-monorepo.gitcd react-native-universal-monorepo && yarnПошаговое руководство по созданию этого хранилища с нуля:
Учебник для платформ TV и Next.js от @TheFinnomenon:
Дополнительные ресурсы:
Команды разработки и сборки:
yarn android:metro : запустите Metro Server для Android/iOSyarn android:start : Начните разработать приложение Androidyarn android:studio : Откройте приложение Android на Android Studioyarn ios:metro : запустите Metro Server для Android/iOSyarn ios:start : Начните разрабатывать приложение для iOSyarn ios:pods : установить зависимости кокопод iOSyarn ios:xcode : Откройте приложение для iOS на XCodeyarn macos:metro : запустите сервер Metro для macOSyarn macos:start : Начните разработать приложение MacOSyarn macos:pods : установить зависимости кокопод MacOSyarn macos:xcode : Откройте приложение MacOS на XCodeyarn web:start : начните разработать веб -приложениеyarn web:build : создать производственную сборку веб -приложенияyarn electron:start : Начните разрабатывать электронное приложениеyarn electron:package:mac : Пакет Производственный двоичный файл электронного приложения для MacOSyarn electron:package:win : упаковка Созданный двоичный файл электронного приложения для Windowsyarn electron:package:linux : Пакет производственный двоичный файл электронного приложения для Linuxyarn browser-ext:start : Начните разрабатывать расширение браузераyarn browser-ext:build : Создайте производственную сборку расширения браузераyarn windows:metro : запустите сервер Metro для Windowsyarn windows:start : начните разработать приложение Windowsyarn tv:android:metro : запустить сервер Metro для Android TVyarn tv:android:start : Начните разрабатывать приложение Android TVyarn tv:android:studio : Откройте приложение Android TV в Android Studioyarn tv:tvos:metro : запустить сервер Metro для TVOSyarn tv:tvos:start : Начните разрабатывать приложение TVOSyarn tv:tvos:xcode : Откройте приложение TVOS в XCODEyarn tv:tvos:pods : Установить зависимости кокопод TVOSyarn next:start : запустить приложение Next.jsyarn next:build : строить приложение следующего.jsyarn next:serve : Подавайте следующую сборку приложения.Другие команды (мы используем Ultra-Runner для запуска этих команд во всех рабочих пространствах):
yarn lint : пронзительно каждый проектyarn lint:fix : Lint + исправить каждый проектyarn test : запустить тесты каждого проектаyarn typecheck : запустите проверку типовой типов на каждом проекте Работая над Nate Native в Monorepo, вы заметите, что несколько пакетов не будут работать правильно при подъеме-либо потому, что они должны быть изначально связаны, либо потому, что они в конечном итоге будут в комплекте дважды, разбивая сборку (например, react , react-dom ).
Это не проблема с подходом, используемым в этом проекте как таковом. Это скорее общая проблема с Monorepos.
Чтобы решить эти проблемы, мы помечаем их как неахоусенные, поэтому они будут установлены в каждом пакете, который зависит от них.
В этом Monorepo вы можете увидеть пример таких библиотек в react-native-async-storage .
В конфигурациях Metro Bundler и Webpack, используемых в MonorePo, мы используем набор контактных инструментов, чтобы гарантировать, что пакеты не подъехают правильно.
Итак, пока вы добавляете эти библиотеки в список nohoist , вы должны быть полезны?
Мы стремимся сделать эту настройку совместимой с Yarn Classic, но, с несколькими изменениями, она также совместима с пряжей 2+ (обеспечивая все преимущества пряжи 2+).
Смотрите #22 для получения дополнительной информации.
yarn set version berry в корне проекта. Это создаст файл .yarnrc.yml ..yarnrc.yml , чтобы гарантировать, что каталоги node_modules все созданы в каждом рабочем пространстве: nodeLinker : node-modules
nmHoistingLimits : workspacesnmHositingLimits рассказывает, как поднимать зависимости для каждого рабочего пространства. Установив его в workspaces все зависимости будут установлены в node_modules каждого рабочего пространства, а не поднимаются в корневую папку. Это означает, что теперь вы можете безопасно безопасно раздела noHoist в package.json корня.Проверьте руководство «Начало работы» пряжи 2+для получения дополнительной информации.
В некоторых случаях пряжа Classic не сможет разрешить правильно зависимости, которые имеют peerDependency от react-native .
Смотрите #22 за несколько обходных путей. Исправление в репо-репо react-native-monorepo-tools находится на работе.
Взносы, дискуссии и обратная связь приветствуются! Пожалуйста, спросите, есть ли какие -либо активные планы по изменениям функций, прежде чем отправлять новые PRS?