Files
ozon-seller-kit/start.command
T
2026-08-29 17:13:06 +08:00

107 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/zsh
# 双击本文件,或在终端执行:./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,正在创建…"
python3 -m venv .venv || exit 1
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
echo "按回车关闭…"
read -r
exit 1
fi
# ---- 采集插件(extensions/collector):启动时构建一次,之后监听代码改动自动重建 ----
# 产物 .output/chrome-mv3 由 Chrome 以解压方式加载;重建后仍需去 chrome://extensions 点刷新
COLLECTOR_WATCH_PID=""
COLLECTOR_STAMP="$(mktemp -u /tmp/osk-collector-stamp.XXXXXX)"
watch_collector() {
touch "$COLLECTOR_STAMP"
while true; do
sleep 3
if [[ -n "$(find extensions/collector/src extensions/collector/wxt.config.ts -newer "$COLLECTOR_STAMP" -print 2>/dev/null)" ]]; then
touch "$COLLECTOR_STAMP"
echo "🔧 检测到插件代码改动,重新构建…"
if pnpm -C extensions/collector build >/dev/null 2>&1; then
echo "✅ 采集插件已重建($(date +%H:%M:%S)),去 chrome://extensions 点刷新生效"
else
echo "⚠️ 采集插件重建失败($(date +%H:%M:%S)):可手动跑 pnpm -C extensions/collector build 看报错"
fi
fi
done
}
if [[ ! -d extensions/collector ]]; then
echo "⚠️ 未找到 extensions/collector,跳过采集插件构建"
elif ! command -v pnpm >/dev/null 2>&1; then
echo "⚠️ 未找到 pnpm,本次跳过采集插件构建(可手动:pnpm -C extensions/collector build)"
elif ! CI=true pnpm -C extensions/collector install --silent; then
echo "⚠️ 采集插件依赖安装失败,本次跳过构建"
else
echo "正在构建采集插件…"
if pnpm -C extensions/collector build; then
echo "采集插件已构建:extensions/collector/.output/chrome-mv3"
else
echo "⚠️ 采集插件构建失败,继续启动服务(可手动重试:pnpm -C extensions/collector build)"
fi
watch_collector &
COLLECTOR_WATCH_PID=$!
fi
echo
# ---- 同步并启动前端(studio:Vite 开发服务器,/api 代理到后端 8800)----
STUDIO_PID=""
cleanup() {
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
if [[ -n "$COLLECTOR_WATCH_PID" ]] && kill -0 "$COLLECTOR_WATCH_PID" 2>/dev/null; then
pkill -P "$COLLECTOR_WATCH_PID" 2>/dev/null # 可能正在跑的 build 子进程
kill "$COLLECTOR_WATCH_PID" 2>/dev/null
fi
rm -f "$COLLECTOR_STAMP" 2>/dev/null
}
trap cleanup 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 "$BACKEND_HOST" --port "$BACKEND_PORT"
echo
echo "服务已停止。按回车关闭窗口…"
read -r