diff --git a/dev.sh b/dev.sh index 8c390cc..8ad0e22 100755 --- a/dev.sh +++ b/dev.sh @@ -90,6 +90,34 @@ check_deps() { success "依赖检查完成" } +# 构建热重载目录参数(返回热重载参数,日志输出到stderr) +build_reload_dirs() { + local RELOAD_DIRS="" + local APPS_FILE="apps/apps.txt" + + if [ ! -f "$APPS_FILE" ]; then + warn "未找到 $APPS_FILE,仅监听 jingrow 应用" >&2 + [ -d "apps/jingrow" ] && RELOAD_DIRS="--reload-dir $(cd apps/jingrow && pwd)" + else + info "从 $APPS_FILE 读取应用列表..." >&2 + while IFS= read -r app_name || [ -n "$app_name" ]; do + app_name=$(echo "$app_name" | sed 's/#.*$//' | xargs) + [ -z "$app_name" ] && continue + + if [ -d "apps/$app_name" ]; then + RELOAD_DIRS="$RELOAD_DIRS --reload-dir $(cd "apps/$app_name" && pwd)" + info " 添加热重载: $app_name" >&2 + else + warn " 应用目录不存在: apps/$app_name" >&2 + fi + done < "$APPS_FILE" + + [ -z "$RELOAD_DIRS" ] && warn "未找到任何应用目录,仅使用默认重载" >&2 || success "热重载目录配置完成" >&2 + fi + + echo "$RELOAD_DIRS" +} + # 启动所有服务 start_all() { info "启动开发环境..." @@ -102,12 +130,15 @@ start_all() { export $(grep -v '^#' .env | xargs) fi + # 构建热重载目录参数 + RELOAD_DIRS=$(build_reload_dirs) + info "启动所有服务..." # 使用延迟启动,让后端先启动3秒 npx concurrently \ --names "BACKEND,WORKER,FRONTEND" \ --prefix-colors "blue,yellow,green" \ - "cd apps/jingrow && uvicorn jingrow.main:app --host 0.0.0.0 --port 9001 --reload" \ + "cd apps/jingrow && uvicorn jingrow.main:app --host 0.0.0.0 --port 9001 --reload $RELOAD_DIRS" \ "cd apps/jingrow && dramatiq jingrow.services.queue --processes 1 --threads 1" \ "sleep 3 && cd apps/jingrow/frontend && npm run dev" } @@ -131,10 +162,13 @@ start_backend() { export $(grep -v '^#' .env | xargs) fi + # 构建热重载目录参数 + RELOAD_DIRS=$(build_reload_dirs) + npx concurrently \ --names "BACKEND,WORKER" \ --prefix-colors "blue,yellow" \ - "cd apps/jingrow && uvicorn jingrow.main:app --host 0.0.0.0 --port 9001 --reload" \ + "cd apps/jingrow && uvicorn jingrow.main:app --host 0.0.0.0 --port 9001 --reload $RELOAD_DIRS" \ "cd apps/jingrow && dramatiq jingrow.services.queue --processes 1 --threads 1" }