20

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

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

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

我去了React Native 故障排除页面并试图杀死端口 8081 进程,但我仍然遇到同样的问题。

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

错误截图

任何帮助将不胜感激。

4

12 回答 12

21

如果您按照Facebook 故障排除页面中的lsof -n -i4TCP:8081建议进行操作,但结果为空,请使用.sudo lsof -n -i4TCP:8081

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

于 2015-05-30T17:01:10.293 回答
14

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

> npm start

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

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

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

{
  "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 Stack Post Here的 android

构建 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
于 2015-10-19T12:49:54.073 回答
14

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

kill -9 $(lsof -t -i:8081)
于 2018-10-29T11:53:20.870 回答
10

有同样的问题!

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

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

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

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

于 2017-09-04T15:48:10.250 回答
5

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

首先,打开 Xcode。

  • 查看 [ProjectName]/[ProjectName]/AppDelegate.m 中的 Project navigator(left):

    改变

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

    http://localhost:8999/index.ios.bundle?platform=ios&dev=true
    
  • 在项目导航器(左)[项目名称]/库中:

    单击“React.xcodeproj”。在主面板上,单击“构建阶段”标签。

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

  • 在 Project navigator(left) [ProjectName] / Libraries / RCTWebSocket.xcodeproj / RCTWebSocketExecutor.m 中:搜索 8081 并将其替换为 8999

第二个打开的 Finder

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

将“脚本”属性更改为:

{...

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

然后打开终端

  • $cd 到项目根目录:

    $ npm 开始

凉爽的!然后

返回Xcode 并单击播放按钮。

交叉你的手指。

耐心点。客户端会出现空白。

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

于 2016-03-29T21:12:29.443 回答
2

运行以下命令:

反应原生开始--port = 8088

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

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

于 2018-03-18T21:39:50.407 回答
1

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

解决方案:

  1. 杀死进程port 8081
  2. 清洁 Xcode Xcode Menu > Product > Clean:.
  3. 重新打开 Xcode。

资源:

React-Native 故障排除

于 2015-05-14T13:45:48.127 回答
1

在“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";

更新:

“反应”:“16.8.3”,“反应原生”:“0.59.8”,

node_modules > react-native > React > React.xcodeproj

将端口从 8081 更改为 8082


在 react-native 的其他版本中,搜索字符串RCT_METRO_PORTalready in use,. 在找到的结果中,将端口从 8081 更改为所需的端口(例如:8082)。

于 2019-09-04T07:27:28.097 回答
0

我的问题是Wifi DNS设置..

一世。转到设置->网络

ii. 选择已连接的 Wifi,点击Advance

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

iv. 在终端中运行react-native run-ios就可以了。

于 2017-07-11T15:59:17.633 回答
0

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

于 2018-09-01T14:54:13.367 回答
0

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

因此,如果你需要使用 React Native 调试东西,你需要停止 docker,如果它使用相同的端口。

于 2018-12-12T15:50:41.053 回答
0

以下步骤适用于我在 iOS 和 XCode 10.1 上运行 react-native 代码

  1. 在项目根文件夹中,转到 ios 文件夹并双击 {projectName}.xcodeproject 文件。这将打开 XCode。
  2. 在 XCode 中,选择文件 >> 项目设置。
  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 端口中运行打包程序。
于 2019-02-22T04:58:27.977 回答