79 lines
1.9 KiB
Bash
Executable File
79 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 在仓库任意目录记这三条就够:
|
|
# npm run be 只开后端 http://127.0.0.1:8010
|
|
# npm run fe 只开前端 http://127.0.0.1:5173
|
|
# npm run dev 两个一起开(在项目根目录)
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
MODE="${1:-all}"
|
|
PY="$ROOT/core/backend/.venv/bin/python"
|
|
|
|
listening() {
|
|
lsof -nP -iTCP:"$1" -sTCP:LISTEN >/dev/null 2>&1
|
|
}
|
|
|
|
need_python() {
|
|
if [[ -x "$PY" ]]; then
|
|
return 0
|
|
fi
|
|
echo "后端环境还没装好。在项目里执行一次:"
|
|
echo " cd core/backend && python3.12 -m venv .venv && .venv/bin/pip install -r requirements.txt"
|
|
exit 1
|
|
}
|
|
|
|
start_backend() {
|
|
need_python
|
|
if listening 8010; then
|
|
echo "后端已经在跑: http://127.0.0.1:8010"
|
|
return 0
|
|
fi
|
|
echo "后端 → http://127.0.0.1:8010"
|
|
cd "$ROOT/core/backend"
|
|
exec "$PY" manage.py runserver 0.0.0.0:8010
|
|
}
|
|
|
|
start_frontend() {
|
|
if listening 5173; then
|
|
echo "前端已经在跑: http://127.0.0.1:5173"
|
|
return 0
|
|
fi
|
|
if [[ ! -d "$ROOT/core/frontend/node_modules" ]]; then
|
|
echo "第一次开前端,先装依赖…"
|
|
npm --prefix "$ROOT/core/frontend" install
|
|
fi
|
|
echo "前端 → http://127.0.0.1:5173"
|
|
cd "$ROOT/core/frontend"
|
|
exec npm run dev
|
|
}
|
|
|
|
case "$MODE" in
|
|
be|backend)
|
|
start_backend
|
|
;;
|
|
fe|frontend)
|
|
start_frontend
|
|
;;
|
|
all|dev)
|
|
need_python
|
|
trap 'kill 0' INT TERM
|
|
if listening 8010; then
|
|
echo "后端已经在跑: http://127.0.0.1:8010"
|
|
else
|
|
echo "后端 → http://127.0.0.1:8010"
|
|
(cd "$ROOT/core/backend" && "$PY" manage.py runserver 0.0.0.0:8010) &
|
|
fi
|
|
if listening 5173; then
|
|
echo "前端已经在跑: http://127.0.0.1:5173"
|
|
else
|
|
echo "前端 → http://127.0.0.1:5173"
|
|
(cd "$ROOT/core/frontend" && npm run dev) &
|
|
fi
|
|
wait
|
|
;;
|
|
*)
|
|
echo "用法: npm run be | npm run fe | npm run dev"
|
|
exit 1
|
|
;;
|
|
esac
|