React Native - Port 8081 already in use, packager is either not running or not running correctly Command /bin/sh failed with exit code 2
我正在尝试启动并运行React Native,并且在Xcode中看到以下消息:
Port 8081 already in use, packager is either not running or not running correctly
Command /bin/sh failed with exit code 2
我去了React Native故障排除页面并试图杀死端口8081进程,但是我仍然遇到同样的问题。
这是我在Xcode中看到的屏幕截图:
任何帮助将不胜感激。
如果按照Facebook的故障排除页面的建议执行
就我而言,事实证明McAfee防病毒软件正在运行侦听该端口的进程。终止该进程(我知道,我知道!)解决了这个问题。
对于需要将端口8081更改为其他端口的用户,请尝试以下步骤。
将启动node_modules / react-native / packager / packager.sh
在这里它将合并命令行参数,即--port到预定义的选项中。即端口= 8081
我更新了package.json
1 2 3 4 5 6 7 8 9 10 11 | { "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" } } |
**请注意,这可能不适用于显然已硬编码为8081的android
建立Xcode
在构建Xcode时,它仍然会失败,因为它尝试运行脚本来启动节点。您将需要从构建过程中删除该脚本或将其更新到新端口。
在
您可以自己调用
1 2 3 4 5 6 7 8 | 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。需要在xcode-project下另外更新RCTWebSocketExecutor.m:Libraries / RCTWebSocket.xcodeproj
1 2 3 4 | - (instancetype)init { return [self initWithURL:[RCTConvert NSURL:@"http://localhost:8999/debugger-proxy"]]; } |
**从iOS启动打包程序**
如果仅从iOS启动,则您还需要编辑launchPackager.command以添加适当的端口,因为Xcode使用此文件来运行javascript。
1 | $THIS_DIR/packager.sh --port=8999 |
遇到同样的问题!
对于Android,我可以使用adb重定向端口,但是在iOS中,无法找到在自定义端口中运行React Native的方法。必须接管McAfee的8081端口。
对于无法直接终止McAfee进程/服务的Mac用户,可以通过
1 2 | cd /Library/LaunchDaemons sudo launchctl unload com.mcafee.agent.macmn.plist |
还写了一条备忘录来解释launchctl详细信息和MacOS引导流程。
简单方法:
尝试以下代码
1 | kill -9 $(lsof -t -i:8081) |
在其他人的答案的帮助下。我尝试了以下步骤。它对我有用,希望对其他人有用。它仅适用于iOS。
假设我们要将8081端口更改为8999端口。
首先,打开Xcode。
-
看项目导航器(左)
[ProjectName] / [ProjectName] /AppDelegate.m:更改
1http://localhost:8081/index.ios.bundle?platform=ios&dev=true至
1http://localhost:8999/index.ios.bundle?platform=ios&dev=true -
在项目导航器(左)[ProjectName] /库中:
点击" React.xcodeproj"。在主面板上,单击"构建阶段"标签。
展开"运行脚本",使用叉号将其删除。
-
在项目导航器(左)中[ProjectName] /库/
RCTWebSocket.xcodeproj / RCTWebSocketExecutor.m:搜索8081和
换成8999
第二次打开Finder
在项目根目录中,打开" package.json":
将"脚本"属性更改为:
1 2 3 4 5 | {... "start":"node_modules/react-native/packager/packager.sh --port=8999" ... } |
然后打开终端
-
$ cd到项目根目录:
$ npm开始
凉!然后
返回Xcode并单击播放按钮。
交叉手指。
耐心一点。客户端中将有一个空白。
您可以看到它正在后端上构建(终端会记录下来)。
运行以下命令:
react-native开始--port = 8088
我对运行在8081上的McAfee有相同的问题。这对我有用。
https://facebook.github.io/react-native/docs/troubleshooting.html
我发现了问题:由于某种原因,我没有杀死
解:
资源:
React-Native故障排除
在"反应" 16.8.6和"反应本机"中:" 0.60.5"
转到[YOURPROJECT]> ios> [YOURPROJECT] .xcodeproj> project.pbxproj
将RCT_METRO_PORT更改为您的端口(例如:8089)
清洁并建造。它应该工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 | shellScript ="export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8089}\"\ echo \"export RCT_METRO_PORT=${RCT_METRO_PORT}\"> \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\ if [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\ if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\ if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\ echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\ exit 2\ fi\ else\ open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\ fi\ fi\ "; |
更新:
" react":" 16.8.3",
" react-native":" 0.59.8",
node_modules> react-native> React> React.xcodeproj
将端口从8081更改为8082
在其他版本的react-native中,搜索字符串
以下步骤为我工作,以便在iOS和XCode 10.1上运行react-native代码
我只是遇到了同样的问题,发现Docker正在使用端口8081。
因此,如果您需要使用React Native调试内容,则需要停止使用相同端口的docker。
我在运行
我的问题是Wifi DNS设置。
一世。转到"设置"->"网络"。
ii。选择连接的Wifi,单击高级。
iii。选择DNS,您可能已将DNS服务器设置为8.8.8.8(上帝知道您的意图;))。删除并将其设置为默认的192.168.1.1。单击
iv。在终端中运行react-native run-ios,它可以工作。