我试图使用React Native启动并运行,我在Xcode中看到了以下消息:
端口8081已在使用中,打包器未运行或未正常运行
命令/ bin / sh失败,退出代码为2
我去了React Native troubleshooting page并试图杀死端口8081进程,但我仍然遇到同样的问题。
以下是我在Xcode中看到的截图:
任何帮助都将得到充分的赞赏。
答案 0 :(得分:19)
如果按Facebook's troubleshooting page中的建议lsof -n -i4TCP:8081
进行sudo lsof -n -i4TCP:8081
并获得空结果,请使用 <!-- StateProvider -->
<div ng-controller="demoController">
<button ng-click="goToHomePage()">Go To Home Page</button>
</div>
<!-- Load extra js -->
<script type="text/javascript" src="js/lib/jquery/jquery-2.1.3.js"></script>
<script type="text/javascript" src="js/lib/angular/angular.js"></script>
<script type="text/javascript" src="js/lib/angular/angular-route.js"></script>
<script type="text/javascript" src="js/lib/angular/angular-sanitize.js"></script>
<script type="text/javascript" src="js/lib/angular/angular-animate.js"></script>
<script type="text/javascript" src="js/lib/angular-ui/angular-ui-router.js"></script>
<script type="text/javascript" src="js/appDemo.js"></script>
<script type="text/javascript" src="js/service/DemoService.js"></script>
<script type="text/javascript" src="js/controller/DemoController.js"></script>
</body>
再试一次。
就我而言,事实证明McAfee防病毒软件正在运行侦听该端口的进程。杀死这个过程(我知道,我知道!)解决了这个问题。
答案 1 :(得分:12)
对于需要将端口8081更改为其他端口的人,请尝试以下步骤。
> npm start
将启动 node_modules / react-native / packager / packager.sh
在那里它将命令行参数合并,即--port到预定义的选项。即port = 8081
我更新了package.json start
选项以包含我的首选端口,因为我无法使用此端口停止现有服务。
{
"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遍布全店。需要在xcode-project下额外更新RCTWebSocketExecutor.m:Libraries / RCTWebSocket.xcodeproj
- (instancetype)init
{
return [self initWithURL:[RCTConvert NSURL:@"http://localhost:8999/debugger-proxy"]];
}
**从iOS启动打包器** 如果仅从iOS启动,那么您还需要编辑launchPackager.command以添加到适当的端口,因为Xcode使用此文件来运行javascript。
$THIS_DIR/packager.sh --port=8999
答案 2 :(得分:9)
有同样的问题!
对于Android我可以使用adb to redirect port,但在iOS中,无法想象我们在自定义端口中运行React Native的方法。必须从McAfee接管8081端口。
对于无法直接终止McAfee进程/服务的Mac用户,您可以通过launchctl
(macOS)卸载它,然后您可以在默认的8081端口上运行打包服务器。
cd /Library/LaunchDaemons
sudo launchctl unload com.mcafee.agent.macmn.plist
还写了一份备忘录来解释launchctl detail and MacOS boot flow。
答案 3 :(得分:6)
借助别人的答案。我尝试了以下步骤。它对我有用,对其他人有希望。 仅适用于iOS。 假设我们要将 8081端口更改为8999端口。
首先,打开Xcode。
查看Project导航器(左)In [项目] / [项目] /AppDelegate.m:
更改
http://localhost:8081/index.ios.bundle?platform=ios&dev=true
到
http://localhost:8999/index.ios.bundle?platform=ios&dev=true
在项目导航器中(左)[ProjectName] / Libraries:
点击“React.xcodeproj”。在主面板上,单击“构建阶段”标记。
展开“运行脚本”,用十字架删除它。
在项目导航器中(左)[ProjectName] / Libraries / RCTWebSocket.xcodeproj / RCTWebSocketExecutor.m:搜索8081和 将其替换为8999
第二次打开Finder
在项目根目录中,打开“package.json”:
将“script”属性更改为:
{...
"start": "node_modules/react-native/packager/packager.sh --port=8999"
...
}
然后打开终端
$ cd to project root:
$ npm start
酷!然后
返回 Xcode并点击播放按钮。
交叉手指。
耐心等待。客户端会有一个空白。
你可以看到它正在后端构建(终端会记录它)。
答案 4 :(得分:2)
运行以下命令:
react-native start --port = 8088
迈克菲在8081上运行时遇到了同样的问题。这对我有用。
https://facebook.github.io/react-native/docs/troubleshooting.html
答案 5 :(得分:1)
我发现了问题:出于某种原因,我没有在port 8081
上杀死进程,导致Xcode失败。
<强>解决方案:强>
port 8081
。Xcode Menu > Product > Clean
。<强> 资源: 强>
答案 6 :(得分:1)
有趣的是,我遇到了同样的问题。但是对我来说解决方案有点不同,上面提到的方法都没有用。
我安装了LittleSnithc,当我在Xcode中运行时,LittleSnitch提示Xcode正在尝试连接到&#34; localhost.lan&#34;通过nc。当然,我没有理由否认它,然后构建失败。
我所做的只是拒绝将Xcode通过nc传递给LittleSnitch中的localhost.lan并且问题消失了!
答案 7 :(得分:1)
简便方法: 尝试使用以下代码
kill -9 $(lsof -t -i:8081)
答案 8 :(得分:0)
我的问题是Wifi DNS设置..
我。转到设置 - &gt; 网络即可。
II。选择已连接的Wifi,单击高级。
III。选择 DNS ,您可能已将DNS服务器设置为 8.8.8.8 (天知道您的意图;))。将其删除并将其设置为默认值 192.168.1.1 。单击“确定”。
IV。在终端中运行 react-native run-ios ,它可以正常工作。
答案 9 :(得分:0)
我在运行react-native run-ios ----port=8088
时遇到了同样的问题,但还没有尝试使用android
答案 10 :(得分:0)
我只是遇到了同样的问题,发现Docker正在使用8081端口。
因此,如果您需要使用React Native调试东西,则需要停止使用相同端口的docker。
答案 11 :(得分:0)
以下步骤对我有用,可以在iOS和XCode 10.1上运行react-native代码
npm install @babel/runtime --save-dev
react-native run-ios --port=8088
运行项目。这将在8088端口中运行打包程序。 答案 12 :(得分:0)
在“ react” 16.8.6和“ react-native”中:“ 0.60.5”
转到[您的项目]> ios> [您的项目] .xcodeproj> project.pbxproj
将RCT_METRO_PORT更改为您的端口(例如: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”, “ react-native”:“ 0.59.8”,
node_modules> react-native> React> React.xcodeproj
将端口从8081更改为8082
在其他版本的react-native中,搜索字符串RCT_METRO_PORT
或already in use,
。在找到的结果中,将端口从8081更改为所需的端口(例如:8082)。