【问题标题】:React Native - Port 8081 already in use, packager is either not running or not running correctly Command /bin/sh failed with exit code 2React Native - 端口 8081 已在使用中,打包程序未运行或未正确运行命令 /bin/sh 失败,退出代码为 2
【发布时间】:2015-07-24 20:02:15
【问题描述】:

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

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

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

我去了React Native troubleshooting page并试图杀死端口8081进程,但我仍然遇到同样的问题。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: xcode reactjs-native


    【解决方案1】:

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

    解决方案:

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

    资源:

    React-Native Troubleshooting

    【讨论】:

      【解决方案2】:

      如果您按照Facebook's troubleshooting page 中的建议执行lsof -n -i4TCP:8081 并得到空结果,请使用sudo lsof -n -i4TCP:8081 重试。

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

      【讨论】:

      • 谢谢,我需要使用 sudo。
      • 我无法关闭 McAfee Anti-virus。它出于某种原因出现。请建议。我的问题 - github.com/facebook/react-native/issues/10623
      • 太棒了!只有当我使用sudo lsof... 时,我才得到一个节点进程。也许我用 sudo 运行了 npm start 或类似的东西。
      • 啊!好吧好吧,这看起来像是我的罪魁祸首。在 biz 网络上一切正常,但现在出现端口冲突错误。奇怪的是,Packger 在启动时不会停止......
      • 迈克菲也是我的罪魁祸首。卸载 McAfee 解决了所有问题。有点难以删除迈克菲。此处的说明:gist.github.com/pjobson/11167316
      【解决方案3】:

      对于需要将端口 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 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
      

      【讨论】:

      【解决方案4】:

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

      首先,打开 Xcode。

      • 查看项目导航器(左)中 [项目名称]/[项目名称]/AppDelegate.m:

        改变

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

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

        点击“React.xcodeproj”。在主面板上,点击“Build Phases”标签。

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

      • 在项目导航器中(左)[项目名称]/库/ RCTWebSocket.xcodeproj / RCTWebSocketExecutor.m :搜索 8081 和 用 8999 替换它

      第二次打开 Finder

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

      将“脚本”属性更改为:

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

      然后打开终端

      • $cd 到项目根目录:

        $ npm 开始

      酷!那么

      返回Xcode并点击播放按钮。

      交叉手指。

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

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

      【讨论】:

      • 我无法按照步骤 1,我去了 [ProjectName]/[ProjectName]/AppDelegate.m 并没有找到 http://localhost:8081/index.ios.bundle?platform=ios&dev=true 然后去了 [ProjectName]/Libraries 并没有'在“构建阶段”中找不到“运行脚本”,在 [ProjectName] / Libraries / RCTWebSocket.xcodeproj / RCTWebSocketExecutor.m 中也没有找到 8081@
      • 以上地方都没有端口设置,您可以检查并更新您的答案吗?
      • 这些不再有效。 react-native run-ios --port <port> 工作
      【解决方案5】:

      我的问题是 Wifi DNS 设置..

      我。转到设置-> 网络

      二。选择已连接的Wifi,点击Advance

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

      四。在终端运行 react-native run-ios 就可以了。

      【讨论】:

        【解决方案6】:

        遇到同样的问题!

        对于 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

        【讨论】:

        • 太棒了!再见迈克菲:D
        【解决方案7】:

        运行以下命令:

        react-native start --port=8088

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

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

            • 上面写着:kill: not enough arguments
            【解决方案10】:

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

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

            【讨论】:

            • 帮我修好了。
            【解决方案11】:

            以下步骤适用于我在 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 端口中运行打包程序。

            【讨论】:

              【解决方案12】:

              在“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”, "react-native": "0.59.8",

              node_modules > react-native > React > React.xcodeproj

              将端口从 8081 更改为 8082


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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-05-12
                • 2018-04-26
                • 2019-03-05
                • 1970-01-01
                • 1970-01-01
                • 2018-12-11
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多