#!/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/" 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 "$URL" exit 0 fi rm -f "$PID_FILE" 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 "$URL" exit 0 fi sleep 0.25 done echo "项目启动超时,请查看日志:$LOG_FILE" read "?按回车键关闭窗口..." exit 1