React native ERROR Packager non può ascoltare sulla porta 8081


85

Quando eseguo il comando react-native start, viene visualizzatoPackager can't listen on port 8081 .

So che il problema riguarda il software che utilizza la mia porta 8081.

Uso Resource Monitor per vedere la porta, ma non riesco a trovare 8081, non c'è 8081

Qualcuno può mostrarmi come trovarlo?

inserisci qui la descrizione dell'immagine


1
Dai un'occhiata a questo post , dovresti trovarlo.
Antoine Grandchamp

Oltre alle altre risposte, assicurati che il bundler Metro non sia già in esecuzione in qualche finestra terminale dimenticata da tempo da qualche parte.
Lurifaxel

Risposte:


110

Puoi eseguire il packager su un'altra porta.

$ react-native start --port=8088

In alternativa, scopri cosa sta usando quali porte su Windows con netstat.

$ netstat -a -b -o

Netstat ti dà un PID, che puoi usare per terminare il processo.

$ taskkill /pid 1234

148

Su un Mac, esegui il seguente comando per trovare l'ID del processo che utilizza la porta, 8081
sudo lsof -i :8081
quindi esegui quanto segue per terminare il processo:
kill -9 23583

Ecco come apparirà inserisci qui la descrizione dell'immagine


4
Funziona anche su Ubuntu 18.04
theapache64

1
Ha funzionato anche per me, su MacOS High Sierra
Liran H

31

Questo errore si verifica perché alcuni processi sono già in esecuzione sulla porta 8081. Interrompi quel processo e quindi esegui il tuo comando, eseguirà il tuo codice. Per questo primo elenco tutti i processi che utilizzano questa porta digitando

lsof -i :8081  

Questo comando elencherà l'id del processo (PID) del processo e quindi terminerà il processo del nodo utilizzando

kill -9 <PID>  

Qui PID è l'id di processo del processo del nodo.


19

Quell'immagine mostra effettivamente che il tuo 8081 non è in uso. Se i suggerimenti di cui sopra non hanno aiutato e il tuo dispositivo mobile è collegato al tuo computer tramite usb (e hai Android 5.0 (Lollipop) o versioni successive) potresti provare:

$ adb reconnect

Questo non è necessario nella maggior parte dei casi, ma per ogni evenienza, ripristiniamo la connessione con il tuo cellulare e riavvia il server adb. Finalmente:

$ adb reverse tcp:8081 tcp:8081

Quindi, ogni volta che il tuo dispositivo mobile tenta di accedere a qualsiasi porta 8081 su se stesso, verrà instradato alla porta 8081 sul tuo PC.

Oppure si potrebbe provare

$ killall node

9

Ubuntu / Unix e & MacOS

Il mio Metro Bundler era bloccato e c'erano molti processi di nodo in esecuzione, ma non avevo nessun altro sviluppo in corso oltre a react-native, quindi ho eseguito:

$ killall -9 node

Metro Bundler è in esecuzione tramite il nodo sulla porta 8081 per impostazione predefinita e può incontrare problemi a volte per cui si blocca (di solito a causa della pressione di CTRL+ Sin rapida successione con il ricaricamento a caldo attivo). Se premi CTRL+ Cper terminare il react-native run-androidprocesso, ti divertirai improvvisamente perché react-native-run-androidrimarrai bloccato su:

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

Correzione:

$ killall -9 node

$ react-native run-android

Nota: se stai sviluppando altre app in quel momento, uccidere tutte le procedure del nodo potrebbe interromperle o qualsiasi servizio basato su nodo che hai in esecuzione, quindi fai attenzione alla natura radicale di killall -9. Se non stai eseguendo un database o un'app basati su nodi o non ti dispiace riavviarli manualmente, allora dovresti essere a posto.

Il motivo per cui lascio questa risposta dettagliata a questa domanda semi-indipendente è che la mia è una soluzione a un problema comune semi-correlato che purtroppo richiede 2 passaggi per essere risolto ma fortunatamente richiede solo 2 passaggi per tornare al lavoro.

Se desideri rimuovere chirurgicamente esattamente la spazzatura Metro Bundler sulla porta 8081, segui i passaggi nella risposta da RC_02 , che sono:

$ sudo lsof -i :8081

$ kill -9 23583

(dove 23583 è l'ID del processo)


6

Prendi il terminale e digita

fuser 8081/tcp

Otterrai un ID processo che utilizza la porta 8081 Ora interrompi il processo

kill <pid>

4

Dovresti terminare tutti i processi in esecuzione sulla porta 8081 tramite kill -9 $(lsof -i:8081)


2

Controlla se c'è già un server Node in esecuzione sulla tua macchina e poi chiudilo.


2

Prova a eseguire in un'altra porta come 3131. Esegui il comando:

react-native run-android --port=3131

McAfee sta usando questa porta nel mio caso. Come accennato, l'esecuzione in diverse porte aiuta.
Muthu

1

Ciò potrebbe essere dovuto a McAfee che utilizza quella porta. Facendo semplicelsof -i 8081 potrebbe non mostrare l'applicazione e potrebbe essere necessario eseguirne il sudo.

Fai sudo lsof -i 8081e se questo comando fornisce un output puoi ucciderlo usando sudo launchctl remove com.mcafee.agent.macmn. Dopo questo riavvia il packager.


1

nel mio caso, Internet sull'emulatore è inattivo perché non c'è segnale wifi sull'emulatore. Il ripristino dell'emulatore ha funzionato.


0

Per risolvere questo problema, il processo che ho menzionato di seguito.

Annullare il processo corrente di "React Native Run-Android" con CTRL + C o CMD + C

Chiudi la riga di comando della finestra del bundler metro (terminale) che si apre automaticamente.

Esegui di nuovo il comando sul terminale, "react-native run-android


0

Prima di tutto, nel tuo dispositivo vai a Dev. Opzione -> ADB su rete dopo averlo fatto:

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

(o run-ios, a proposito)

se questo ha avuto successo, il tuo dispositivo ha installato app-debug.apk, apri app-debug e vai a Dev. Impostazioni -> Host del server di debug e porta per il dispositivo , digitare l'indirizzo IP della macchina (generalmente, Preferenze di sistema -> Rete ), come nell'esempio sotto < indirizzo IP della macchina > : 8081 (senza disuguaglianza)

infine, esegui il comando seguente

$ react-native start --port=8081

prova altre porte e verifica che la tua macchina e il tuo dispositivo siano la stessa rete.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.