关于xcode:React Native-端口8081已在使用中,打包程序未运行或未正确运行命令/ bin / sh失败,退出代码2

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中看到的屏幕截图:

error screenshots

任何帮助将不胜感激。


如果按照Facebook的故障排除页面的建议执行lsof -n -i4TCP:8081并获得空结果,请使用sudo lsof -n -i4TCP:8081重试。

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


对于需要将端口8081更改为其他端口的用户,请尝试以下步骤。

> npm start

将启动node_modules / react-native / packager / packager.sh

在这里它将合并命令行参数,即--port到预定义的选项中。即端口= 8081

我更新了package.json start选项以包括我的首选端口,因为我无法停止使用该端口的现有服务。

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时,它仍然会失败,因为它尝试运行脚本来启动节点。您将需要从构建过程中删除该脚本或将其更新到新端口。

libraries下,选择React.xcodeproj。在主屏幕中,选择Build Phases。您将看到Run Script

您可以自己调用npm start删除该条目,或者编辑端口。

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用户,可以通过launchctl(macOS)卸载它,然后可以在默认的8081端口上运行打包程序服务器。

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:

    更改

    1
    http://localhost:8081/index.ios.bundle?platform=ios&dev=true

    1
    http://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


我发现了问题:由于某种原因,我没有杀死port 8081上的进程,这导致Xcode失败。

解:

  • port 8081上终止该进程。
  • 清除Xcode:Xcode Menu > Product > Clean
  • 重新打开Xcode。
  • 资源:

    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中,搜索字符串RCT_METRO_PORTalready in use,。在找到的结果中,将端口从8081更改为所需的端口(例如:8082)。


    以下步骤为我工作,以便在iOS和XCode 10.1上运行react-native代码

  • 在项目根文件夹中,转到ios文件夹,然后双击{projectName} .xcodeproject文件。这将打开XCode。
  • 在XCode中,选择"文件">>"项目设置"。
  • 这将打开设置页面,在同一页面中,将"每用户项目设置:">>"构建系统"从"用户共享设置"更改为"旧版构建系统"
  • 保存您的更改。
  • 然后npm install @babel/runtime --save-dev
  • 然后使用命令react-native run-ios --port=8088运行项目。这将在8088端口中运行打包程序。

  • 我只是遇到了同样的问题,发现Docker正在使用端口8081。

    因此,如果您需要使用React Native调试内容,则需要停止使用相同端口的docker。


    我在运行react-native run-ios ----port=8088时遇到了同样的问题,但尚未尝试android


    我的问题是Wifi DNS设置。

    一世。转到"设置"->"网络"。

    ii。选择连接的Wifi,单击高级。

    iii。选择DNS,您可能已将DNS服务器设置为8.8.8.8(上帝知道您的意图;))。删除并将其设置为默认的192.168.1.1。单击

    iv。在终端中运行react-native run-ios,它可以工作。