React Native - 端口8081已在使用中,打包器未运行或未正常运行Command/bin/sh失败,退出代码为2

use*_*373 15 xcode reactjs-native

我正在尝试使用React Native启动并运行,我在Xcode中看到以下消息:

端口8081已在使用中,打包程序未运行或未正常运行

命令/ bin/sh失败,退出代码为2

我去了React Native故障排除页面并尝试终止端口8081进程,但我仍然遇到同样的问题.

这是我在Xcode中看到的截图:

错误截图

任何帮助将完全赞赏.

esc*_*ten 19

如果lsof -n -i4TCP:8081按照Facebook的故障排除页面中的建议进行操作并获得空结果,请再次尝试使用sudo lsof -n -i4TCP:8081.

就我而言,事实证明McAfee防病毒软件正在运行侦听该端口的进程.杀死这个过程(我知道,我知道!)解决了这个问题.


Emi*_*ile 13

对于需要将端口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"
  }
}
Run Code Online (Sandbox Code Playgroud)

**请注意,这可能不适用于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
Run Code Online (Sandbox Code Playgroud)

调试 似乎8081遍布全店.需要在xcode-project下另外更新RCTWebSocketExecutor.m:Libraries/RCTWebSocket.xcodeproj

- (instancetype)init
{
  return [self initWithURL:[RCTConvert NSURL:@"http://localhost:8999/debugger-proxy"]];
}
Run Code Online (Sandbox Code Playgroud)

**从iOS启动打包器**如果仅从iOS启动,那么您还需要编辑launchPackager.command以添加到适当的端口,因为Xcode使用此文件来运行javascript.

$THIS_DIR/packager.sh  --port=8999
Run Code Online (Sandbox Code Playgroud)


Ars*_* KV 12

简单方法: 试试下面的代码

kill -9 $(lsof -t -i:8081)
Run Code Online (Sandbox Code Playgroud)

  • 它说:“杀死:没有足够的论据” (4认同)

LeO*_* Li 10

有同样的问题!

对于Android,我可以使用adb重定向端口,但在iOS中,无法想象我们在自定义端口中运行React Native的方法.必须从McAfee接管8081端口.

对于无法直接终止McAfee进程/服务的Mac用户,您可以通过launchctl(macOS)卸载它,然后您可以在默认的8081端口上运行打包服务器.

cd /Library/LaunchDaemons
sudo launchctl unload com.mcafee.agent.macmn.plist
Run Code Online (Sandbox Code Playgroud)

还写了一份备忘录来解释launchctl细节和MacOS启动流程.


小智 5

借助别人的答案.我尝试了以下步骤.它对我有用,对其他人有希望.它仅适用于iOS. 假设我们要将8081端口更改为8999端口.

首先,打开Xcode.

  • 在[ProjectName]/[ProjectName] /AppDelegate.m中查看Project导航器(左):

    更改

    http://localhost:8081/index.ios.bundle?platform=ios&dev=true 
    
    Run Code Online (Sandbox Code Playgroud)

    http://localhost:8999/index.ios.bundle?platform=ios&dev=true
    
    Run Code Online (Sandbox Code Playgroud)
  • 在项目导航器(左)[ProjectName] /库中:

    单击"React.xcodeproj".在主面板上,单击"构建阶段"标记.

    展开"运行脚本",用十字架删除它.

  • 在项目导航器(左)[ProjectName]/Libraries/RCTWebSocket.xcodeproj/RCTWebSocketExecutor.m中:搜索8081并将其替换为8999

第二次打开Finder

在项目根目录中,打开"package.json":

将"脚本"属性更改为:

{...

    "start": "node_modules/react-native/packager/packager.sh --port=8999"
...
}
Run Code Online (Sandbox Code Playgroud)

然后打开终端

  • $ cd到项目根目录:

    $ npm开始

凉!然后

返回Xcode并单击播放按钮.

交叉你的手指.

耐心点.客户端会有一个空白.

您可以看到它正在后端进行构建(终端将记录它).

  • 我无法按照步骤1,我去了[ProjectName]/[ProjectName] /AppDelegate.m并没有找到`http:// localhost:8081/index.ios.bundle?platform = ios&dev = true`然后转到[ProjectName]/Libraries并没有在"Build Phases"中找到"Run Scripts",也没有在`[ProjectName]/Libraries/RCTWebSocket.xcodeproj/RCTWebSocketExecutor.m中找到8081 (11认同)
  • 这些不再有效。`react-native run-ios --port <port>` 有效 (2认同)