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 troubleshooting page 并试图终止端口 8081 进程,但我仍然遇到同样的问题。

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

如有任何帮助,我们将不胜感激。

我发现了问题:出于某种原因我没有终止 port 8081 上的进程,它导致 Xcode 失败。

解法:

  1. 终止 port 8081 上的进程。
  2. 清洁 Xcode: Xcode Menu > Product > Clean.
  3. 重新打开 Xcode。

资源:

React-Native Troubleshooting

如果您按照 Facebook's troubleshooting page 中的建议执行 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 选项以包含我的首选端口,因为我无法停止使用此端口的现有服务。

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

librariesselectReact.xcodeproj之下。在主界面selectBuild 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

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

首先,打开Xcode.

  • 查看Project navigator(左)中 [项目名称]/[项目名称]/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”。在主面板上,单击“Build Phases”标签。

    展开“运行脚本”,用叉号删除。

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

第二次打开Finder

在项目根目录下,打开“package.json”:

将“脚本”属性更改为:

{...

    "start": "node_modules/react-native/packager/packager.sh --port=8999"
...
}

然后打开终端

  • $cd 到项目根目录:

    $ npm 开始

酷!那么

返回Xcode并点击播放按钮。

双手合十。

要有耐心。客户端会有空白。

你可以看到它正在后端构建(终端会记录它)。

我的问题是 Wifi DNS 设置。

我。转到 设置-> 网络

二。 Select已连接的Wifi,点击高级

三。 Select DNS,您可能已将 DNS 服务器设置为 8.8.8.8(上帝知道您的意图;))。将其删除并设置为默认的192.168.1.1。单击“确定”。

四。 运行 终端中的 react-native 运行-ios 并且有效。

遇到了同样的问题!

对于 Android,我可以使用 adb to redirect port,但在 iOS 中,无法找到在自定义端口中 运行 React Native 的方法。必须从 McAfee 接管 8081 端口。

对于那些 Mac 无法直接杀死 McAfee process/service 的用户,您可以通过 launchctl(macOS) 卸载它,然后您可以 运行 打包服务器在默认的 8081 端口上。

cd /Library/LaunchDaemons
sudo launchctl unload com.mcafee.agent.macmn.plist

还写了一个备忘录来解释launchctl detail and MacOS boot flow

运行 以下命令:

react-native 开始 --port=8088

我在 8081 上使用 McAfee 运行ning 时遇到了同样的问题。这对我有用。

https://facebook.github.io/react-native/docs/troubleshooting.html

我遇到了同样的问题 运行 react-native run-ios ----port=8088 对我有用,还没有尝试 android

简单方法: 尝试使用以下代码

kill -9 $(lsof -t -i:8081)

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

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

以下步骤对我在 iOS 和 XCode 10.1

上的 运行ning react-native 代码有效
  1. 在项目根文件夹中,转到 ios 文件夹并双击 {projectName}.xcodeproject 文件。这将打开 XCode.
  2. 在 XCode、select 文件 >> 项目设置中。
  3. 这将打开设置页面,在同一页面中将 "Per-User Project Settings:" >> "Build System" 从 'User Shared Setting' 更改为 'Legacy Build System'
  4. 保存您的更改。
  5. 然后npm install @babel/runtime --save-dev
  6. 然后运行项目使用命令react-native run-ios --port=8088。这将 运行 8088 端口中的打包程序。

在 "react" 16.8.6 和 "react-native" 中:“0.60.5”

转到 [YOURPROJECT] > ios > [YOURPROJECT].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";

更新:

"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)。