RN: 如何启动 local server

使用 react-native init 创建的工程, 在 xcode 中运行会自动启动一个 RN 的本地 Server.

像下面图片展示这样:
1

那么, 这里问题来了.

比如, 我想暂时不启动这个本地 Server, 那么如何关闭呢?

下面跟大家一起探讨和追究一下.

找到启动的根源

启动这个终端的是在一个 React.xcodeproj 工程的 「Build Phases」中脚本里面配置的.

脚本内容如下:

1
2
3
4
5
6
7
8
if nc -w 5 -z localhost 8081 ; then
if ! curl -s "http://localhost:8081/status" | grep -q "packager-status:running" ; then
echo "Port 8081 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

真正起作用的是:

1
open "$SRCROOT/../packager/launchPackager.command"

解决方案

这样我们就可以关闭这个自启动了, 示例代码如下:

1
2
3
4
5
6
7
8
9
if nc -w 5 -z localhost 8081 ; then
if ! curl -s "http://localhost:8081/status" | grep -q "packager-status:running" ; then
echo "Port 8081 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"
echo "Nothing..."
fi

看看 launchPackager.command

这个文件在「node_modules/react-native/packager/」下面.

该文件是启动另外一个脚本 packager.sh, 核心代码:

1
source ./packager.sh

最终执行:

1
node "$THIS_DIR/../local-cli/cli.js" start "$@"

大家有兴趣可以去看看源码, 一探究竟.

坚持原创技术分享!