React Native - порт 8081 уже используется, упаковщик либо не работает, либо работает неправильно. Сбой команды /bin/sh с кодом выхода 2

Я пытаюсь начать работать с React Native и вижу сообщение ниже в Xcode:

Порт 8081 уже используется, упаковщик либо не работает, либо работает неправильно

Команда /bin/sh не выполнена с кодом выхода 2

Я перешел на страницу устранения неполадок React Native и попытался убить процессы порта 8081, но у меня все еще возникает та же проблема.

Вот скриншот того, что я вижу в Xcode:

error screenshots

Любая помощь будет полностью оценена.

Ответ 1

С помощью других людей ответы. Я попробовал следующие шаги. Это сработало для меня и, надеюсь, для других. Это работает только для iOS. Допустим, мы хотим изменить порт 8081 на порт 8999.

Сначала откройте Xcode.

  • Посмотрите на навигатор проекта (слева) В [ProjectName]/[ProjectName]/AppDelegate.m:

    + Изменить

    http://localhost:8081/index.ios.bundle?platform=ios&dev=true 
    

    в

    http://localhost:8999/index.ios.bundle?platform=ios&dev=true
    
  • В Навигаторе проекта (слева) [ProjectName]/Библиотеки:

    Нажмите "React.xcodeproj". На главной панели щелкните тэг "Build Phases".

    Разверните "Run Script", удалите его крестиком.

  • В навигаторе проекта (слева) [ProjectName]/Libraries/RCTWebSocket.xcodeproj/RCTWebSocketExecutor.m: найдите 8081 и замените его на 8999

Второй открытый Finder

В корне проекта откройте "package.json":

Измените атрибут "script" на:

{...

    "start": "node_modules/react-native/packager/packager.sh --port=8999"
...
}

Тогда открой терминал

  • $ cd для корня проекта:

    $ npm start

Здорово! затем

Вернитесь в Xcode и нажмите кнопку воспроизведения.

Скрестить пальцы.

Потерпи. Там будет пустым в клиенте.

Вы можете видеть, что это делает сборку на бэкэнде (терминал регистрирует это).

Ответ 2

Если вы сделаете lsof -n -i4TCP:8081 как рекомендовано в странице устранения неполадок в Facebook и получите пустой результат, повторите попытку, используя sudo lsof -n -i4TCP:8081.

В моем случае выясняется, что антивирусное программное обеспечение McAfee запускает процесс, который прослушивает этот порт. Убив этот процесс (я знаю, я знаю!), Исправил проблему.

Ответ 3

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

> npm start

запустит node_modules/реагировать-нативный /packager/packager.sh

Там он объединит параметры командной строки, то есть --port, в предопределенные параметры. то есть порт = 8081

Я обновил опцию start package.json, добавив предпочитаемый порт, так как не смог остановить существующие службы, использующие этот порт.

{
  "name": "AwesomeProject",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node_modules/react-native/packager/packager.sh --port=8999"
  },
  "dependencies": {
    "react-native": "^0.12.0"
  }
}

** Обратите внимание, что это может не работать для Android, который, по-видимому, жестко запрограммирован в 8081 Stack Post Here

Сборка XCode При сборке XCode он все равно потерпит неудачу при попытке запустить скрипт для запуска узла. Вам нужно будет либо удалить этот скрипт из процесса сборки, либо обновить его до нового порта.

Под libraries выберите React.xcodeproj. На главном экране выберите Build Phases. Вы увидите Run Script.

Либо удалите эту запись, вызвав npm start самостоятельно, либо отредактируйте порт.

if nc -w 5 -z localhost 8999 ; then
  if ! curl -s "http://localhost:8999/status" | grep -q "packager-status:running" ; then
    echo "Port 8999 already in use, packager is either not running or not running correctly"
    exit 2
  fi
else
  open $SRCROOT/../packager/launchPackager.command || echo "Can't start packager automatically"
fi

Отладка Кажется, 8081 повсюду в магазине. Необходимо дополнительно обновить RCTWebSocketExecutor.m под xcode-project: Libraries/RCTWebSocket.xcodeproj

- (instancetype)init
{
  return [self initWithURL:[RCTConvert NSURL:@"http://localhost:8999/debugger-proxy"]];
}

** Запуск упаковщика из iOS ** Если запуск только из iOS, вам дополнительно необходимо отредактировать launchPackager.com и добавить соответствующий порт, так как этот файл используется Xcode для запуска JavaScript.

$THIS_DIR/packager.sh  --port=8999

Ответ 4

Была такая же проблема!

Для Android я могу использовать adb для перенаправления порта, но в iOS не могу понять, как запустить React Native в пользовательском порту. Пришлось взять порт 8081 от McAfee.

Для тех пользователей Mac, которые не могут напрямую уничтожить процесс/службу McAfee, вы можете выгрузить их через launchctl (macOS), а затем запустить сервер упаковщика через порт 8081 по умолчанию.

cd /Library/LaunchDaemons
sudo launchctl unload com.mcafee.agent.macmn.plist

Также написал памятку, чтобы объяснить детали launchctl и процесс загрузки MacOS.

Ответ 6

Простой способ: попробуйте следующий код

kill -9 $(lsof -t -i:8081)

Ответ 7

Я выяснил проблему: по какой-то причине я не убил процесс на port 8081, и это вызвало отказ Xcode.

Решение:

  • Убейте процесс port 8081.
  • Очистить Xcode: Xcode Menu > Product > Clean.
  • Повторно открыть Xcode.

Ресурс:

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

Ответ 8

Достаточно интересно, я просто столкнулся с той же проблемой. Однако решение немного отличается для меня, ни один из предложенных выше методов не сработал.

У меня установлен LittleSnithc, и когда я запускаю run в Xcode, LittleSnitch подсказывает, что Xcode пытается подключиться к "localhost.lan" через nc. Конечно, у меня не было причин это отрицать, тогда сборка не удалась.

Все, что я сделал после этого - запретил исходящее соединение Xcode через nc с localhost.lan в LittleSnitch, и проблема исчезла!

Ответ 9

Моя проблема была в настройке Wifi DNS.

я. Перейдите в Настройки Сеть.

II. Выберите подключенный Wi-Fi, нажмите Advance.

III. Выберите DNS, вы можете настроить DNS-сервер на 8.8.8.8 (Бог знает ваше намерение;)). Удалите его и установите для него значение по умолчанию 192.168.1.1. Нажмите "ОК".

IV. Запустите run-ios для реагирования в терминале, и он работает.

Ответ 10

У меня возникла та же проблема, react-native run-ios ----port=8088 у меня сработало, еще не пробовал android

Ответ 11

У меня была такая же проблема, и я узнал, что Docker использует порт 8081.

Поэтому, если вам нужно отладить что-то с помощью React Native, вам нужно остановить Docker, если он использует тот же порт.

Ответ 12

Следующие шаги помогли мне запустить реактивный код на iOS и XCode 10.1

  1. В корневой папке проекта перейдите в папку ios и дважды щелкните файл {projectName}.xcodeproject. Это откроет XCode.
  2. В XCode выберите "Файл" >> "Настройки проекта".
  3. Откроется страница настроек, на этой же странице измените "Настройки проекта для пользователя": >> "Система сборки" с "Настройки общего доступа" на "Система сборки прежних версий".
  4. Сохраните ваши изменения.
  5. Затем npm install @babel/runtime --save-dev
  6. Затем запустите проект, используя react-native run-ios --port=8088. Это запустит упаковщик в порту 8088.

Ответ 13

В "реагировать" 16.8.6 и "реагировать нативно": "0,60,5"

Перейдите в [YOURPROJECT]> ios> [YOURPROJECT].xcodeproj> project.pbxproj

ИЗМЕНИТЕ RCT_METRO_PORT В ПОРТ (EX: 8089)

Очистить и построить. Это должно работать.

        shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8089}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n  if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n    if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n      echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n      exit 2\n    fi\n  else\n    open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n  fi\nfi\n";

Обновление:

"реагировать": "16.8.3", "реактивный": "0,59,8",

node_modules >act-native> React> React.xcodeproj

Измените порт с 8081 на 8082


В других версиях реагировать на нативный, найдите строку RCT_METRO_PORT или already in use,. В результате поиска измените порт с 8081 на нужный порт (например, 8082).