110 lines
2.4 KiB
Bash
110 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
||
# =============================================================================
|
||
# 08-build-static-frontend.sh — 构建静态前端资源(dist)
|
||
#
|
||
# 用法:
|
||
# ./08-build-static-frontend.sh # 构建 cms + build-cms
|
||
# ./08-build-static-frontend.sh cms # 只构建 cms
|
||
# ./08-build-static-frontend.sh build-cms # 只构建 build-cms
|
||
#
|
||
# 产物目录:
|
||
# /app/cms/dist
|
||
# /app/build-cms/dist
|
||
# =============================================================================
|
||
set -euo pipefail
|
||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
|
||
init_dirs
|
||
init_script_log
|
||
|
||
header "构建静态前端资源"
|
||
|
||
declare -A FE_DIR=(
|
||
[cms]="cms"
|
||
[build-cms]="build-cms"
|
||
)
|
||
|
||
declare -A FE_PM=(
|
||
[cms]="pnpm"
|
||
[build-cms]="pnpm"
|
||
)
|
||
|
||
declare -A FE_BUILD_CMD=(
|
||
[cms]="pnpm run build"
|
||
[build-cms]="pnpm run build"
|
||
)
|
||
|
||
FE_PROJECTS=(cms build-cms)
|
||
TARGET="${1:-all}"
|
||
|
||
_valid_target() {
|
||
local target="$1"
|
||
for p in "${FE_PROJECTS[@]}"; do
|
||
[[ "$p" == "$target" ]] && return 0
|
||
done
|
||
return 1
|
||
}
|
||
|
||
_build_fe() {
|
||
local name="$1"
|
||
local dir="$ROOT_DIR/${FE_DIR[$name]}"
|
||
local pm="${FE_PM[$name]}"
|
||
local cmd="${FE_BUILD_CMD[$name]}"
|
||
local dist_dir="$dir/dist"
|
||
|
||
if [[ ! -d "$dir" ]]; then
|
||
error "$name 目录不存在: $dir"
|
||
return 1
|
||
fi
|
||
|
||
if [[ ! -d "$dir/node_modules" ]]; then
|
||
error "$name node_modules 不存在,请先执行: ./deploy-test/06-install-frontend.sh $name"
|
||
return 1
|
||
fi
|
||
|
||
if ! command -v "$pm" &>/dev/null; then
|
||
error "$name 需要 $pm,未安装"
|
||
return 1
|
||
fi
|
||
|
||
info "构建 ${BOLD}$name${NC} ..."
|
||
(
|
||
cd "$dir"
|
||
rm -rf "$dist_dir"
|
||
# shellcheck disable=SC2086
|
||
$cmd
|
||
)
|
||
|
||
if [[ ! -d "$dist_dir" ]]; then
|
||
error "$name 构建完成但 dist 不存在: $dist_dir"
|
||
return 1
|
||
fi
|
||
|
||
success "$name 构建完成 → $dist_dir"
|
||
}
|
||
|
||
if [[ "$TARGET" == "all" ]]; then
|
||
FAILED=()
|
||
for proj in "${FE_PROJECTS[@]}"; do
|
||
_build_fe "$proj" || FAILED+=("$proj")
|
||
done
|
||
|
||
if [[ ${#FAILED[@]} -gt 0 ]]; then
|
||
error "以下静态前端构建失败: ${FAILED[*]}"
|
||
exit 1
|
||
fi
|
||
else
|
||
if ! _valid_target "$TARGET"; then
|
||
error "未知项目: $TARGET"
|
||
echo "可用: ${FE_PROJECTS[*]}"
|
||
exit 1
|
||
fi
|
||
_build_fe "$TARGET"
|
||
fi
|
||
|
||
echo ""
|
||
echo -e "${BOLD}下一步:${NC}"
|
||
echo " 1. 以 root 执行: sudo ./deploy-test/00-init-tools.sh nginx"
|
||
echo " 2. 域名访问:"
|
||
echo " - http://cms-jack.imharry.work/"
|
||
echo " - http://build-jack.imharry.work/"
|