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 失败。
解法:
- 终止
port 8081
上的进程。
- 清洁 Xcode:
Xcode Menu > Product > Clean
.
- 重新打开 Xcode。
资源:
如果您按照 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 它仍然会失败,因为它试图 运行 一个脚本来启动节点。您需要从构建过程中删除此脚本或将其更新到新端口。
在libraries
selectReact.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 代码有效
- 在项目根文件夹中,转到 ios 文件夹并双击 {projectName}.xcodeproject 文件。这将打开 XCode.
- 在 XCode、select 文件 >> 项目设置中。
- 这将打开设置页面,在同一页面中将 "Per-User Project Settings:" >> "Build System" 从 'User Shared Setting' 更改为 'Legacy Build System'
- 保存您的更改。
- 然后
npm install @babel/runtime --save-dev
- 然后运行项目使用命令
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_PORT
或already in use,
。在找到的结果中,将端口从 8081 更改为所需的端口(例如:8082)。
我正在尝试起床 运行 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 失败。
解法:
- 终止
port 8081
上的进程。 - 清洁 Xcode:
Xcode Menu > Product > Clean
. - 重新打开 Xcode。
资源:
如果您按照 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
建筑Xcode 当构建 Xcode 它仍然会失败,因为它试图 运行 一个脚本来启动节点。您需要从构建过程中删除此脚本或将其更新到新端口。
在libraries
selectReact.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 代码有效- 在项目根文件夹中,转到 ios 文件夹并双击 {projectName}.xcodeproject 文件。这将打开 XCode.
- 在 XCode、select 文件 >> 项目设置中。
- 这将打开设置页面,在同一页面中将 "Per-User Project Settings:" >> "Build System" 从 'User Shared Setting' 更改为 'Legacy Build System'
- 保存您的更改。
- 然后
npm install @babel/runtime --save-dev
- 然后运行项目使用命令
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_PORT
或already in use,
。在找到的结果中,将端口从 8081 更改为所需的端口(例如:8082)。