Что делают ruby-файлы в React Native проекте, сгенерированном утилитой "react-native"?
Только что сгенерировал проект через npx react-native init AwesomeTSProject --template react-native-template-typescript. Expo мне не подходит потому, что насколько мне извесно, этой фреймворк собирает только для Android и iOS, а я собрался запускать приложение на всех поддерживаемых платформах.
Вообще, я стараюсь не пользоваться генераторами проектов по двум причинам:
- Много ненужного
- Предложенная структура файлов меня как правило не устраивает
Однако методологией 100%-го ручного развёртывания React Native-проекта я пока не владею, а потому приходится чистить и реорганизовывать преложенную структуру файлов.
Первое, что бросается в глаза - это начилие файлов Ruby (.ruby-version, Gemfile, Gemfile.lock). С точки зрения логики, непонятно что эти файлы делают в React Native-проекте - мне что, предлагают серверную часть написать на Ruby?
Ну и второй вопрос - можно ли все эти файлы безопасно удалить.
Ответы (1 шт):
Конкретно о тех файлах, что у вас в вопросе.
Ответ можно найти в документации, описание установки окружения разработки. Для управления пакетами в react-native для Mac используется CocoaPods, который и есть зависим от ruby.
Если после установки заглянуть в Gemfile, то там будет примерно так
source 'https://rubygems.org'
ruby '2.7.4'
gem 'cocoapods', '~> 1.11', '>= 1.11.2'
Это с реального проекта. То есть мы можем увидеть, что ничего более, чем запуск cocoapods там нет.
Без данных файлов все прекрасно работает как в web, так Android. Но чтобы собрать проект под IOS, я использую следующую рутину
cd project/ios
pod install
# или для M1/Silicon
arch -x86_64 pod install
и если убрать указанные файлы, то я получу исключение с ошибкой.
То есть данные файлы используются для менеджмента пакетов, аналог для npm/yarn.
UPD
Например, здесь описано, как работает autolinking (механизм, который обнаруживает нативный код для платформы в библиотеках и использует его) для IOS. Вы можете увидеть, что процесс состоит из двух шагов, один из которых - это добавление зависимостей через CocoaPods.
Но и это еще не все. Я потестил и обнаружил, что в версии react > 0.64, все прекрасно работает без gem-файлов до тех пор пока не понадобятся нативные библиотеки или SDK. Я тестировал с mapbox gl for react-native. Там есть возможность установить через CocoaPods или загрузить вручную SDK. В первом случае понадобились gem, во втором все прекрасно заработало без них.
Резюме
В зависимости от тех пакетов и библиотек, которые вы используете на IOS, вам могут понадобиться ruby файлы