Spec-Zone.ru › React Native

Устранение неполадок

Вот некоторые распространённые проблемы, с которыми вы можете столкнуться при настройке React Native. Если вы столкнётесь с чем-то, чего здесь нет, попробуйте поискать проблему на GitHub.

Порт уже используется

Бендер Metro работает на порте 8081. Если этот порт уже используется другим процессом, вы можете либо завершить этот процесс, либо изменить порт, используемый бендером.

Завершение процесса на порте 8081

Выполните следующую команду, чтобы найти идентификатор процесса, который прослушивает порт 8081:

sudo lsof -i :8081

Затем выполните следующую команду для завершения процесса:

kill -9 <PID>

В Windows вы можете найти процесс, использующий порт 8081, с помощью Монитора ресурсов и остановить его с помощью Диспетчера задач.

Использование порта, отличного от 8081

Вы можете настроить бендер на использование порта, отличного от 8081, с помощью параметра port:

npx react-native start --port=8088

Также необходимо обновить ваше приложение, чтобы загрузить JavaScript-пакет с нового порта. Если вы работаете на устройстве из Xcode, вы можете сделать это, обновив все вхождения 8081 на ваш выбранный порт в файле ios/__App_Name__.xcodeproj/project.pbxproj.

Ошибка блокировки NPM

Если вы столкнулись с ошибкой типа npm WARN locking Error: EACCES при использовании React Native CLI, попробуйте выполнить следующее:

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

Отсутствующие библиотеки для React

Если вы добавили React Native в свой проект вручную, убедитесь, что вы включили все необходимые зависимости, такие как RCTText.xcodeproj, RCTImage.xcodeproj. Далее, двоичные файлы, скомпилированные этими зависимостями, должны быть связаны с вашим приложением. Используйте раздел Linked Frameworks and Binaries в настройках проекта Xcode. Более подробные шаги см. здесь: Связывание библиотек.

Если вы используете CocoaPods, убедитесь, что вы добавили React вместе с подспеками в Podfile. Например, если вы использовали API <Text />, <Image /> и fetch(), вам нужно добавить их в Podfile:

pod 'React', :path => '../node_modules/react-native', :subspecs => [
  'RCTText',
  'RCTImage',
  'RCTNetwork',
  'RCTWebSocket',
]

Далее, убедитесь, что вы выполнили pod install и что в вашем проекте была создана папка Pods/ с установленным React. CocoaPods будут инструктировать вас использовать сгенерированный файл .xcworkspace для использования этих установленных зависимостей.

Примечание для пользователей Mac M1

Архитектура Mac M1 несовместима с CocoaPods напрямую. Если у вас возникли проблемы с установкой pods, вы можете их решить, выполнив следующие команды:

  • sudo arch -x86_64 gem install ffi
  • arch -x86_64 pod install

Эти команды устанавливают пакет ffi, чтобы загружать динамически связанные библиотеки и правильно запускать pod install, а также выполняют pod install с соответствующей архитектурой.

React Native не компилируется при использовании в качестве CocoaPod

Существует плагин CocoaPods под названием cocoapods-fix-react-native, который обрабатывает любые потенциальные исправления исходного кода из-за различий при использовании менеджера зависимостей.

Список аргументов слишком длинный: рекурсивное расширение заголовков не удалось

В настройках сборки проекта User Search Header Paths и Header Search Paths — это две конфигурации, указывающие, где Xcode должен искать файлы заголовков #import указанных в коде. Для Pods CocoaPods использует стандартный массив конкретных папок для поиска. Проверьте, что эта конфигурация не перезаписывается и ни одна из указанных папок не слишком большая. Если одна из папок очень большая, Xcode попытается рекурсивно перебрать весь каталог и в какой-то момент выбросит ошибку.

Чтобы сбросить настройки сборки User Search Header Paths и Header Search Paths до значений по умолчанию, установленных CocoaPods, выберите запись в панели Настройки сборки и нажмите Удалить. Это удалит пользовательское переопределение и вернёт настройки к значениям по умолчанию CocoaPods.

Нет доступных транспортов

React Native реализует полифил для WebSocket. Эти полифилы инициализируются как часть модуля react-native, который вы включаете в своё приложение через import React from 'react'. Если вы загружаете другой модуль, который требует WebSocket, например Firebase, убедитесь, что вы загружаете/требуете его *после* react-native:

import React from 'react';
import Firebase from 'firebase';

Исключение Shell Command Unresponsive

Если вы столкнулись с исключением ShellCommandUnresponsiveException, например:

Execution failed for task ':app:installDebug'.
  com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException

Попробуйте снизить версию Gradle до 1.2.3 в android/build.gradle.

react-native init зависает

Если у вас возникли проблемы с зависанием npx react-native init на вашей системе, попробуйте запустить его снова в режиме подробной информации и обратитесь к #2797 для распространённых причин:

npx react-native init --verbose

Не удаётся запустить менеджер пакетов React Native (на Linux)

Случай 1: Ошибка "code":"ENOSPC","errno":"ENOSPC"

Проблема, связанная с количеством каталогов, которые inotify (используемый watchman на Linux) может отслеживать. Чтобы решить её, выполните эту команду в вашем терминале:

echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Ошибка: spawnSync ./gradlew EACCES

Если при выполнении npm run android на macOS возникает вышеуказанная ошибка, попробуйте выполнить команду sudo chmod +x android/gradlew, чтобы сделать файлы gradlew исполняемыми.

© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/troubleshooting

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API