feat(build): Enhance build script with colored output and modular structure for backend and frontend

This commit is contained in:
sol 2025-07-11 16:24:53 +08:00
parent 31049fd589
commit cb69126402

117
build.sh
View file

@ -2,44 +2,111 @@
set -e
# 后端打包
echo "正在打包后端..."
# ANSI 颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
RESET='\033[0m'
# 打印函数
print_info() {
echo -e "${BLUE}📘 $1${RESET}"
}
print_step() {
echo -e "\n${YELLOW}🚀 $1${RESET}"
}
print_success() {
echo -e "${GREEN}$1${RESET}"
}
print_error() {
echo -e "${RED}$1${RESET}"
}
print_divider() {
echo -e "${YELLOW}----------------------------------------${RESET}"
}
# 模块配置
BACKEND_MODULES=(
"gateway-9527"
"web-system-8081"
"web-file-8082"
)
# 后端构建阶段
print_divider
print_step "开始后端构建 🏗️"
cd cloud
export MAVEN_OPTS="--add-opens=java.base/java.lang=ALL-UNNAMED"
print_info "🔨 执行 Maven 构建..."
mvn clean package -DskipTests
cd ..
# 复制后端构建结果
echo "准备复制后端构建结果..."
SERVER_OUTPUT_DIR=docker/output/server
rm -rf $SERVER_OUTPUT_DIR
print_success "🎉 后端构建成功!"
mkdir -p $SERVER_OUTPUT_DIR/gateway-9527
cp cloud/gateway-9527/target/*.jar $SERVER_OUTPUT_DIR/gateway-9527/app.jar
# 清理输出目录
SERVER_OUTPUT_DIR="docker/output/server"
print_info "🧹 清理后端输出目录..."
rm -rf "${SERVER_OUTPUT_DIR}"
mkdir -p "${SERVER_OUTPUT_DIR}"
mkdir -p $SERVER_OUTPUT_DIR/web-system-8081/classes
rsync -av --exclude='com/bgasol/**' cloud/web/web-system-8081/target/classes/ $SERVER_OUTPUT_DIR/web-system-8081/classes/
cp cloud/web/web-system-8081/target/*.jar $SERVER_OUTPUT_DIR/web-system-8081/app.jar
# 拷贝构建产物
copy_backend_module() {
local module=$1
local module_dir="cloud/web/${module}"
[[ "${module}" == "gateway-9527" ]] && module_dir="cloud/${module}"
mkdir -p $SERVER_OUTPUT_DIR/web-file-8082/classes
rsync -av --exclude='com/bgasol/**' cloud/web/web-file-8082/target/classes/ $SERVER_OUTPUT_DIR/web-file-8082/classes/
cp cloud/web/web-file-8082/target/*.jar $SERVER_OUTPUT_DIR/web-file-8082/app.jar
local output_dir="${SERVER_OUTPUT_DIR}/${module}"
mkdir -p "${output_dir}/classes"
print_info "📦 处理模块:${module}"
rsync -a --exclude='com/bgasol/**' "${module_dir}/target/classes/" "${output_dir}/classes/"
cp "${module_dir}/target/"*.jar "${output_dir}/app.jar"
print_success "📁 模块 ${module} 输出完成 → ${output_dir}"
}
print_step "📂 开始复制后端构建产物..."
for module in "${BACKEND_MODULES[@]}"; do
copy_backend_module "${module}"
done
print_success "🏁 后端构建产物整理完毕"
# 前端构建阶段
print_divider
print_step "开始前端构建 🌐"
# 前端打包
echo "正在打包前端..."
cd client
print_info "📦 安装依赖 (npm ci)..."
npm ci
print_info "🧱 执行构建 (npm run build)..."
npm run build
cd ..
# 复制前端构建结果
echo "准备复制前端构建结果..."
FRONTEND_OUTPUT_DIR=docker/output/client
rm -rf $FRONTEND_OUTPUT_DIR
mkdir -p $FRONTEND_OUTPUT_DIR
print_success "🎊 前端构建完成"
cp -r client/dist/* $FRONTEND_OUTPUT_DIR/
# 前端构建产物复制
FRONTEND_OUTPUT_DIR="docker/output/client"
print_info "🧹 清理前端输出目录..."
rm -rf "${FRONTEND_OUTPUT_DIR}"
mkdir -p "${FRONTEND_OUTPUT_DIR}"
echo "构建完成,输出目录:"
echo "后端:$SERVER_OUTPUT_DIR"
echo "前端:$FRONTEND_OUTPUT_DIR"
print_info "📂 拷贝前端构建结果..."
cp -r client/dist/* "${FRONTEND_OUTPUT_DIR}/"
print_success "📁 前端输出完成 → ${FRONTEND_OUTPUT_DIR}"
# 完整构建成功
print_divider
echo -e "${GREEN}🎉🎉🎉 全部构建完成!${RESET}"
echo -e "🔧 后端输出目录: ${SERVER_OUTPUT_DIR}"
echo -e "💻 前端输出目录: ${FRONTEND_OUTPUT_DIR}"
print_divider