#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" BACKEND_DIR="$ROOT_DIR/backend" FRONTEND_DIR="$ROOT_DIR/frontend" cleanup() { echo "" echo "[INFO] 正在停止所有服务..." if [[ -n "${BACKEND_PID:-}" ]]; then kill "$BACKEND_PID" 2>/dev/null || true wait "$BACKEND_PID" 2>/dev/null || true fi if [[ -n "${FRONTEND_PID:-}" ]]; then kill "$FRONTEND_PID" 2>/dev/null || true wait "$FRONTEND_PID" 2>/dev/null || true fi echo "[OK] 已停止" exit 0 } trap cleanup INT TERM # 启动后端 echo "[INFO] 启动后端服务..." cd "$BACKEND_DIR" ./start-dev.sh & BACKEND_PID=$! echo "[OK] 后端 PID: $BACKEND_PID" # 等待后端启动 sleep 2 # 启动前端 echo "[INFO] 启动前端服务..." cd "$FRONTEND_DIR" npm run dev & FRONTEND_PID=$! echo "[OK] 前端 PID: $FRONTEND_PID" echo "" echo "=========================================" echo " 服务已启动" echo " 后端: http://localhost:8000" echo " 前端: http://localhost:3000" echo " 按 Ctrl+C 停止所有服务" echo "=========================================" wait