Reaguj natywny ERROR Packager nie może nasłuchiwać na porcie 8081

85

Kiedy uruchamiam polecenie react-native start, to pokazuje Packager can't listen on port 8081.

Wiem, że problem dotyczy oprogramowania używającego mojego portu 8081.

Używam Monitora zasobów, aby zobaczyć port, ale nie mogę znaleźć 8081, nie ma 8081

Czy ktoś może mi pokazać, jak to znaleźć?

wprowadź opis obrazu tutaj

Morton
źródło
1
Spójrz na ten post , powinieneś go znaleźć.
Antoine Grandchamp
Oprócz innych odpowiedzi upewnij się, że pakiet Metro nie jest już uruchomiony w jakimś dawno zapomnianym oknie terminala.
Lurifaxel

Odpowiedzi:

110

Możesz uruchomić program pakujący na innym porcie.

$ react-native start --port=8088

Możesz też dowiedzieć się, jakie porty są używane w systemie Windows za pomocą narzędzia netstat.

$ netstat -a -b -o

Netstat podaje PID, którego można użyć do zabicia procesu.

$ taskkill /pid 1234
Viktor Sec
źródło
148

Na komputerze Mac uruchom następujące polecenie, aby znaleźć identyfikator procesu, który używa portu. 8081
sudo lsof -i :8081
Następnie wykonaj następujące czynności, aby zakończyć proces:
kill -9 23583

Oto jak to będzie wyglądało wprowadź opis obrazu tutaj

RC_02
źródło
4
Działa również na ubuntu 18.04
theapache64
1
U mnie też działało na MacOS High Sierra
Liran H
31

Ten błąd nadchodzi, ponieważ jakiś proces jest już uruchomiony na porcie 8081. Zatrzymaj ten proces, a następnie uruchom polecenie, uruchomi twój kod. W pierwszej kolejności wypisz wszystkie procesy, które używają tego portu, wpisując

lsof -i :8081  

To polecenie wyświetli identyfikator procesu (PID) procesu, a następnie zabije proces węzła za pomocą

kill -9 <PID>  

Tutaj PID jest identyfikatorem procesu węzła.

Pulkit Aggarwal
źródło
19

To zdjęcie rzeczywiście pokazuje, że 8081 nie jest używany. Jeśli powyższe sugestie nie pomogły, a Twoje urządzenie mobilne jest podłączone do komputera przez USB (a masz system Android 5.0 (Lollipop) lub nowszy), możesz spróbować:

$ adb reconnect

W większości przypadków nie jest to konieczne, ale na wszelki wypadek zresetujmy połączenie z telefonem komórkowym i zrestartujmy serwer adb. Wreszcie:

$ adb reverse tcp:8081 tcp:8081

Tak więc za każdym razem, gdy urządzenie mobilne spróbuje uzyskać dostęp do dowolnego portu 8081, zostanie przekierowane do portu 8081 na komputerze.

Albo można spróbować

$ killall node
Miodrag Smolovic
źródło
9

Ubuntu / Unix && MacOS

Mój Metro Bundler utknął i było uruchomionych wiele procesów węzłów, ale nie pracowałem nad żadnym innym rozwojem poza React-Native, więc uruchomiłem:

$ killall -9 node

Metro Bundler domyślnie działa przez węzeł na porcie 8081 i czasami może napotkać problemy, przez które utknie (zwykle z powodu szybkiego naciśnięcia CTRL+ Sz włączonym ponownym ładowaniem). Jeśli naciśniesz CTRL+, Caby zabić react-native run-androidproces, nagle będziesz mieć zły czas, ponieważ react-native-run-androidutkniesz na:

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

Naprawić:

$ killall -9 node

$ react-native run-android

Uwaga: jeśli w tym czasie tworzysz inne aplikacje, zabicie wszystkich procesów węzłów może je przerwać lub wszelkie uruchomione usługi oparte na węzłach, więc pamiętaj o rozległym charakterze killall -9. Jeśli nie korzystasz z bazy danych lub aplikacji opartej na węzłach lub nie masz nic przeciwko ręcznemu ich ponownemu uruchomieniu, powinieneś być gotowy.

Powodem, dla którego zostawiam tę szczegółową odpowiedź na to częściowo niepowiązane pytanie, jest to, że moje jest rozwiązaniem powszechnego, częściowo związanego problemu, który niestety wymaga 2 kroków, aby naprawić, ale na szczęście tylko 2 kroki pozwalają wrócić do pracy.

Jeśli chcesz chirurgicznie usunąć dokładnie śmieci Metro Bundler na porcie 8081, wykonaj kroki w odpowiedzi z RC_02 , które są:

$ sudo lsof -i :8081

$ kill -9 23583

(gdzie 23583 to identyfikator procesu)

agm1984
źródło
6

Weź terminal i wpisz

fuser 8081/tcp

Otrzymasz identyfikator procesu, który używa portu 8081. Teraz zakończ proces

kill <pid>
Ciastko z wróżbą
źródło
4

Powinieneś zabić wszystkie procesy działające na porcie 8081 przez kill -9 $(lsof -i:8081)

Nagibaba
źródło
2

Sprawdź, czy na twoim komputerze jest już uruchomiony serwer Node, a następnie zamknij go.

Hitesh Sahu
źródło
2

Spróbuj uruchomić na innym porcie, np. 3131. Uruchom polecenie:

react-native run-android --port=3131
alvaropaco
źródło
McAfee używa tego portu w moim przypadku. Jak wspomniano, praca w innym porcie pomaga.
Muthu
1

Może to być spowodowane używaniem tego portu przez firmę McAfee. Proste wykonanie lsof -i 8081może nie pokazać aplikacji i być może będziesz musiał ją sudo.

Zrób, sudo lsof -i 8081a jeśli to polecenie daje wynik, możesz je zabić za pomocą sudo launchctl remove com.mcafee.agent.macmn. Po tym ponownie uruchom program pakujący.

Sankalp
źródło
1

w moim przypadku internet na emulatorze nie działa, ponieważ na emulatorze nie ma sygnału wifi. Resetowanie emulatora zadziałało.

Rohit Mandiwal
źródło
0

Aby rozwiązać ten problem, proces, o którym wspomniałem poniżej.

Anuluj bieżący proces „react-native run-android” za pomocą CTRL + C lub CMD + C

Zamknij wiersz poleceń okna programu Metro bundler (terminal), który otworzył się automatycznie.

Ponownie uruchom polecenie na terminalu, „react-native run-android

Nirav Jain
źródło
0

Przede wszystkim w swoim urządzeniu przejdź do Dev. Opcja -> ADB przez sieć po wykonaniu tej czynności:

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

(lub przy okazji run-ios)

jeśli to się powiodło, na Twoim urządzeniu zainstalowano app-debug.apk, otwórz app-debug i przejdź do Dev. Ustawienia -> Host serwera debugowania i port dla urządzenia , wpisz adres IP twojego komputera (ogólnie Preferencje systemowe -> Sieć ), jak w poniższym przykładzie < adres IP twojego komputera > : 8081 (bez nierówności)

na koniec wykonaj poniższe polecenie

$ react-native start --port=8081

wypróbuj inne porty i sprawdź, czy komputer i urządzenie są w tej samej sieci.

Hermanyo H.
źródło