混合开发过程中,RN需要启动一个metro服务来加载jsbundle文件,每次手动启动比较麻烦,现在配置如下脚本就可以自动启动服务,不用每次手动启动了,生产效率又提高了。
1.配置脚本文件,例如setup_rn.sh
#!/bin/bash
# --- 配置 ---
NODE_VERSION="18.20.8"
METRO_PORT=8081
WINDOW_TITLE="Metro Server"
# --- 加载 nvm ---
export NVM_DIR="$HOME/.nvm"
# 支持 bash/zsh 用户
#[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
if [ -s "$NVM_DIR/nvm.sh" ]; then
source"$NVM_DIR/nvm.sh"
else
echo"❌ 找不到 nvm,请先安装:https://github.com/nvm-sh/nvm"
exit 1
fi
# --- 使用指定 Node.js 版本 ---
echo" 使用 Node.js 版本 $NODE_VERSION"
nvm install $NODE_VERSION > /dev/null
nvm use $NODE_VERSION
# 安装依赖
echo"==============================="
echo" 开始安装 React Native 依赖..."
echo"==============================="
echo" 当前目录:$(pwd)"
yarn install
# 检查安装是否成功
if [ $? -eq 0 ]; then
echo"✅ 依赖安装完成。"
else
echo"❌ 依赖安装失败。"
exit 1
fi
# --- 释放 8081 端口(如果被占用) ---
#PID=$(lsof -i tcp:8081 | grep LISTEN | awk '{print $2}')
#if [ -n "$PID" ]; then
# echo " 检测到 8081 端口已被占用(PID: $PID),正在终止相关进程..."
# kill -9 "$PID"
# echo "✅ 8081 端口已释放"
#else
# echo "✅ 8081 端口空闲"
#fi
# 启动 React Native 服务
# shellcheck disable=SC2016
#osascript -e 'tell application "Terminal" to do script "cd '$(pwd)' && yarn start"'
# --- 检查 Metro 是否已运行 ---
echo" 检查 Metro 服务是否运行中..."
METRO_PID=$(lsof -i tcp:$METRO_PORT | grep LISTEN | awk '{print $2}')
if [ -n "$METRO_PID" ]; then
echo"✅ Metro 已在运行(PID: $METRO_PID ),跳过启动"
else
echo" 启动 Metro(启动 Metro(新终端窗口,标题为 '$WINDOW_TITLE')..."
osascript < tell application "Terminal" if not (exists window 1) then do script "cd '$(pwd)' && yarn start" else do script "cd '$(pwd)' && yarn start" in front window end if activate end tell EOF echo "✅ Metro 启动命令已发出" fi echo " 脚本执行完毕" echo " 所有操作执行完毕。"2.在项目gradle中配置执行,注意项目路径tasks.register('runRnSetupScript', Exec) {
description = "执行React Native相关依赖安装和本地服务启动脚本"
commandLine 'chmod', '+x','setup_rn.sh' // 先赋予脚本执行权限
commandLine 'sh', './setup_rn.sh'
workingDir "${project.rootDir}" // 假设脚本在项目根目录,可根据实际情况调整
}
preBuild.dependsOn runRnSetupScript
热门跟贴