79 lines
2.2 KiB
Bash
79 lines
2.2 KiB
Bash
|
|
#!/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 <<EOF
|
|||
|
|
用法: $(basename "$0") [项目...]
|
|||
|
|
|
|||
|
|
可构建项目:
|
|||
|
|
backend, b dashboard/backend pnpm build(tsc)
|
|||
|
|
frontend, f dashboard/frontend pnpm build(vite build --mode prod)
|
|||
|
|
www, w www pnpm generate(nuxt 静态生成)
|
|||
|
|
|
|||
|
|
不带参数时默认构建全部三个项目(顺序:backend -> 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[*]}"
|