React native ERROR Packager не може слухати порт 8081


84

Коли я запускаю команду react-native start, вона відображаєтьсяPackager can't listen on port 8081 .

Я знаю, що проблема в програмному забезпеченні, що використовує мій порт 8081.

Я використовую Resource Monitor, щоб побачити порт, але я не можу знайти 8081, 8081 немає

Хтось може показати мені, як його знайти?

введіть тут опис зображення


1
Погляньте на цю публікацію , ви повинні її знайти.
Антуан Граншам,

На додаток до інших відповідей, переконайтесь, що пакети Metro ще не працюють у якомусь давно забутому терміналі Window.
Lurifaxel

Відповіді:


108

Ви можете запустити пакувальник на інший порт.

$ react-native start --port=8088

Крім того, з’ясуйте, що використовує які порти в Windows за допомогою netstat.

$ netstat -a -b -o

Netstat надає вам PID, який ви можете використовувати для вбивства процесу.

$ taskkill /pid 1234

146

На Mac запустіть таку команду, щоб знайти ідентифікатор процесу, який використовує порт, а 8081
sudo lsof -i :8081
потім виконайте наступне, щоб завершити процес:
kill -9 23583

Ось як це буде виглядати введіть тут опис зображення


4
Працює і на ubuntu 18.04
theapache64

1
Працював і для мене, на MacOS High Sierra
Liran H

1
Nice nice nice nice nice nice, дякую.
Джиф Гілберт,

31

Ця помилка з’являється, оскільки певний процес уже працює на порту 8081. Зупиніть цей процес і запустіть свою команду, вона запустить ваш код. Для цього першого списку введіть усі процеси, які використовують цей порт

lsof -i :8081  

Ця команда перелічить ідентифікатор процесу (PID) процесу, а потім уб'є процес вузла за допомогою

kill -9 <PID>  

Тут PID - це ідентифікатор процесу процесу вузла.


19

Це зображення справді показує, що ваш 8081 не використовується. Якщо наведені вище пропозиції не допомогли, і ваш мобільний пристрій підключено до комп’ютера через usb (а у вас Android 5.0 (Lollipop) або вище), ви можете спробувати:

$ adb reconnect

У більшості випадків це не потрібно, але про всяк випадок давайте скинемо з’єднання з мобільним та перезапустимо сервер adb. Нарешті:

$ adb reverse tcp:8081 tcp:8081

Отже, всякий раз, коли ваш мобільний пристрій намагається отримати доступ до будь-якого порту 8081 на собі, він буде перенаправлений до порту 8081 на вашому ПК.

Або можна спробувати

$ killall node

9

Ubuntu / Unix && MacOS

Мій Metro Bundler застряг, і було запущено багато процесів вузлів, але у мене не було жодної іншої розробки, крім реагування на рідне, тому я запустив:

$ killall -9 node

Metro Bundler за замовчуванням працює через вузол на порту 8081, і іноді може стикатися з проблемами, через які він застряє (зазвичай через швидке натискання CTRL+ Sпри гарячому перезавантаженні). Якщо натиснути CTRL+, Cщоб убити react-native run-androidпроцес, раптом вам буде погано, бо react-native-run-androidзастрягне:

Scanning folders for symlinks in /home/poop/dev/some-app/node_modules (41ms)

Виправлення:

$ killall -9 node

$ react-native run-android

Примітка: якщо ви розробляєте інші програми в той час, вбивання всіх процесів вузлів може перервати їх або будь-які служби на основі вузлів, які ви працюєте, тому майте на увазі широкий характер killall -9. Якщо у вас не працює база даних чи програма на базі вузлів або ви не проти перезапустити їх вручну, тоді вам слід піти.

Причиною, за якою я залишаю цю детальну відповідь на це напівне пов’язане питання, є те, що моє рішення є поширеною напівпов’язаною проблемою, яка, на жаль, вимагає 2 кроків для виправлення, але, на щастя, потрібно лише 2 кроки, щоб повернутися до роботи.

Якщо ви хочете хірургічним способом видалити саме сміття Metro Bundler через порт 8081, виконайте кроки у відповіді від RC_02 , а саме:

$ sudo lsof -i :8081

$ kill -9 23583

(де 23583 - ідентифікатор процесу)


6

Візьміть термінал і введіть

fuser 8081/tcp

Ви отримаєте ідентифікатор процесу, який використовує порт 8081. Тепер вбийте процес

kill <pid>


2

Перевірте, чи на вашому комп'ютері вже запущений сервер Node, а потім закрийте його.


2

Спробуйте запустити в іншому порту, як 3131. Виконайте команду:

react-native run-android --port=3131

У моєму випадку McAfee використовує цей порт. Як вже зазначалося, робота в іншому порту допомагає.
Муту,

1

Це може бути через те, що McAfee використовує цей порт. Виконання простих дій lsof -i 8081може не показати програму, і вам, можливо, доведеться переконатись.

Зробіть, sudo lsof -i 8081і якщо ця команда виведе результат, ви можете вбити її за допомогою sudo launchctl remove com.mcafee.agent.macmn. Після цього знову запустіть пакувальник.


1

у моєму випадку Інтернет на емуляторі не працює, оскільки на емуляторі немає сигналу Wi-Fi. Скидання емулятора спрацювало.


0

Для того, щоб вирішити цю проблему, процес, про який я згадав нижче.

Будь-ласка, скасуйте поточний процес "реагування на натискання на android" за допомогою CTRL + C або CMD + C

Закрийте командний рядок вікна пакету метро (терміналу), який відкрився автоматично.

Знову запустіть команду на терміналі, «response-native run-android


0

Перш за все, у своєму пристрої перейдіть до Dev. Варіант -> ADB через мережу після цього:

$ adb connect <your device adb network>
$ react-native run-android 

(або, до речі, run-ios)

якщо це вдало, ваш пристрій встановив app-debug.apk, відкрийте app-debug та перейдіть до Dev. Налаштування -> Хост і порт сервера налагодження для пристрою , введіть IP-адресу вашого пристрою (як правило, Системні налаштування -> Мережа ), як у прикладі нижче < IP-адреса вашого комп'ютера > : 8081 (без нерівності)

нарешті, виконайте наведену нижче команду

$ react-native start --port=8081

спробуйте інший порт і переконайтеся, що ваш пристрій та пристрій однакові в мережі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.