diff --git a/start.command b/start.command index 65d47d6..c5e4aa3 100755 --- a/start.command +++ b/start.command @@ -2,15 +2,20 @@ # 双击本文件,或在终端执行:./start.command cd "$(dirname "$0")" +BACKEND_HOST="127.0.0.1" +BACKEND_PORT="8800" +BACKEND_URL="http://${BACKEND_HOST}:${BACKEND_PORT}" +STUDIO_URL="http://localhost:8900" + if [[ ! -d .venv ]]; then - echo "未找到 .venv,正在创建并安装依赖…" + echo "未找到 .venv,正在创建…" python3 -m venv .venv || exit 1 - source .venv/bin/activate - pip install -r server/requirements.txt || exit 1 -else - source .venv/bin/activate fi +source .venv/bin/activate +# 每次启动都同步依赖,requirements.txt 有更新时自动补装(已装满时耗时极短) +pip install -q -r server/requirements.txt || exit 1 + if [[ ! -f .env ]]; then echo "未找到 .env,已从 .env.example 复制,请填入 DEEPSEEK_API_KEY 后再启动。" cp .env.example .env @@ -19,12 +24,39 @@ if [[ ! -f .env ]]; then exit 1 fi -echo "启动中:http://127.0.0.1:8800/ozonSeller.html" -echo "按 Ctrl+C 可停止服务" +# ---- 同步并启动前端(studio:Vite 开发服务器,/api 代理到后端 8800)---- +STUDIO_PID="" +stop_studio() { + if [[ -n "$STUDIO_PID" ]] && kill -0 "$STUDIO_PID" 2>/dev/null; then + kill "$STUDIO_PID" 2>/dev/null + sleep 0.2 + # 兜底:确保 vite 及其子进程退出 + lsof -ti :8900 | xargs kill 2>/dev/null + fi +} +trap stop_studio EXIT + +if ! command -v pnpm >/dev/null 2>&1; then + echo "⚠️ 未找到 pnpm,本次跳过 studio 前端(可手动:cd studio && pnpm dev)" +# CI=true:node_modules 与 lockfile 不一致时自动重建,不弹确认 +elif CI=true pnpm -C studio install --silent; then + pnpm -C studio dev & # vite:8900,启动后会自动打开浏览器 + STUDIO_PID=$! +else + echo "⚠️ studio 依赖安装失败,本次只启动后端" +fi + +echo +echo "前端访问地址:" +echo " 工具台 v1(web/) $BACKEND_URL/ozonSeller.html" +echo " 发布工作台(studio/) $STUDIO_URL" +echo " 后端 API 文档 $BACKEND_URL/docs" +echo +echo "按 Ctrl+C 可停止全部服务" echo # --app-dir server 让 uvicorn 在 server/ 下找 main:app,工作目录仍是仓库根(.env 在此) -uvicorn main:app --app-dir server --reload --reload-include '*.yaml' --host 127.0.0.1 --port 8800 +uvicorn main:app --app-dir server --reload --reload-include '*.yaml' --host "$BACKEND_HOST" --port "$BACKEND_PORT" echo echo "服务已停止。按回车关闭窗口…"