Files
SpineParticlesWeb/启动项目.command
T
2026-09-02 10:35:18 +08:00

85 lines
2.2 KiB
Bash
Executable File

#!/bin/zsh
set -u
PROJECT_DIR="${0:A:h}"
RUN_DIR="$PROJECT_DIR/.run"
PID_FILE="$RUN_DIR/spine-particle.pid"
LOG_FILE="$RUN_DIR/spine-particle.log"
URL="http://127.0.0.1:5173/"
open_project_url() {
if [[ "${SPINE_PARTICLE_NO_OPEN:-0}" != "1" ]]; then open "$URL"; fi
}
mkdir -p "$RUN_DIR"
cd "$PROJECT_DIR" || exit 1
if [[ -f "$PID_FILE" ]]; then
RUNNING_PID="$(tr -dc '0-9' < "$PID_FILE")"
if [[ -n "$RUNNING_PID" ]] && kill -0 "$RUNNING_PID" 2>/dev/null; then
echo "Spine粒子编辑器已经在运行,正在打开页面:"
echo "$URL"
open_project_url
exit 0
fi
rm -f "$PID_FILE"
fi
# 兼容此前手动启动、尚未生成 PID 文件的本项目服务。
PORT_PID="$(lsof -tiTCP:5173 -sTCP:LISTEN 2>/dev/null | head -n 1)"
if [[ -n "$PORT_PID" ]]; then
PROCESS_CWD="$(lsof -a -p "$PORT_PID" -d cwd -Fn 2>/dev/null | sed -n 's/^n//p' | head -n 1)"
if [[ "$PROCESS_CWD" == "$PROJECT_DIR" ]]; then
echo "$PORT_PID" > "$PID_FILE"
echo "Spine粒子编辑器已经在运行,正在打开页面:"
echo "$URL"
open_project_url
exit 0
fi
echo "5173 端口正被其他程序占用:$PROCESS_CWD"
read "?按回车键关闭窗口..."
exit 1
fi
if ! command -v npm >/dev/null 2>&1; then
echo "未找到 npm,请先安装 Node.js。"
echo "https://nodejs.org/"
read "?按回车键关闭窗口..."
exit 1
fi
if [[ ! -x "$PROJECT_DIR/node_modules/.bin/vite" ]]; then
echo "首次运行,正在安装项目依赖..."
npm install || {
echo "依赖安装失败,请检查网络或 npm 配置。"
read "?按回车键关闭窗口..."
exit 1
}
fi
echo "正在启动 Spine粒子编辑器..."
nohup "$PROJECT_DIR/node_modules/.bin/vite" --host 127.0.0.1 --port 5173 --strictPort > "$LOG_FILE" 2>&1 &
SERVER_PID=$!
echo "$SERVER_PID" > "$PID_FILE"
for _ in {1..60}; do
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
echo "项目启动失败,日志如下:"
tail -n 30 "$LOG_FILE"
rm -f "$PID_FILE"
read "?按回车键关闭窗口..."
exit 1
fi
if curl -fsS "$URL" >/dev/null 2>&1; then
echo "启动成功:$URL"
open_project_url
exit 0
fi
sleep 0.25
done
echo "项目启动超时,请查看日志:$LOG_FILE"
read "?按回车键关闭窗口..."
exit 1