#!/usr/bin/env bash # ============================================================ # 统一构建脚本:在对应项目目录执行构建命令 # backend -> dashboard/backend pnpm build(tsc) # frontend -> dashboard/frontend pnpm build(vite build --mode prod) # www -> www pnpm generate(nuxt 静态生成) # # 不带参数时默认构建全部三个项目(顺序:backend -> frontend -> www) # # 用法:./deploy/build.sh [项目...] # ============================================================ set -euo pipefail # 仓库根目录 = 本脚本所在目录的上一级 ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" usage() { cat < frontend -> www)。 示例: $(basename "$0") backend 仅构建后端 $(basename "$0") frontend www 构建前端与 www $(basename "$0") 构建全部 EOF } declare -a TARGETS=() add_target() { local t="$1" # 去重 for existing in "${TARGETS[@]:-}"; do [[ "$existing" == "$t" ]] && return done TARGETS+=("$t") } for arg in "$@"; do case "$arg" in -h|--help) usage; exit 0 ;; backend|b) add_target backend ;; frontend|f) add_target frontend ;; www|w) add_target www ;; *) echo "错误: 未知项目「${arg}」" >&2; usage; exit 1 ;; esac done # 默认构建全部 if [[ ${#TARGETS[@]} -eq 0 ]]; then TARGETS=(backend frontend www) fi run_build() { local name="$1" dir="$2" cmd="$3" echo "" echo "==> [$name] 在 $dir 执行: $cmd" (cd "$ROOT/$dir" && $cmd) echo "==> [$name] 构建完成" } for t in "${TARGETS[@]}"; do case "$t" in backend) run_build backend dashboard/backend "pnpm build" ;; frontend) run_build frontend dashboard/frontend "pnpm build" ;; www) run_build www www "pnpm generate" ;; esac done echo "" echo "全部构建完成: ${TARGETS[*]}"