build-frontend.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
# XBoard 前端构建脚本
# 用于单独构建前端资源
set -e
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_success() { echo -e "${BLUE}[SUCCESS]${NC} $1"; }
WEB_DIR="${1:-web}"
if [ ! -d "$WEB_DIR" ]; then
log_error "前端目录不存在: $WEB_DIR"
exit 1
fi
log_info "开始构建前端..."
cd "$WEB_DIR"
# 检查 Node.js
if ! command -v node &>/dev/null; then
log_error "Node.js 未安装"
log_info "请先安装 Node.js: https://nodejs.org/"
exit 1
fi
log_info "Node.js 版本: $(node -v)"
log_info "npm 版本: $(npm -v)"
# 检查 package.json
if [ ! -f "package.json" ]; then
log_error "未找到 package.json"
exit 1
fi
# 清理旧的构建
if [ -d "dist" ]; then
log_info "清理旧的构建产物..."
rm -rf dist
fi
if [ -d "node_modules" ]; then
log_warn "node_modules 已存在"
read -p "是否重新安装依赖? [y/N]: " reinstall
if [ "$reinstall" = "y" ] || [ "$reinstall" = "Y" ]; then
log_info "删除 node_modules..."
rm -rf node_modules
fi
fi
# 安装依赖
if [ ! -d "node_modules" ]; then
log_info "安装依赖 (这可能需要几分钟)..."
# 检测包管理器
if command -v pnpm &>/dev/null; then
log_info "使用 pnpm..."
pnpm install
elif command -v yarn &>/dev/null; then
log_info "使用 yarn..."
yarn install
else
log_info "使用 npm..."
npm install --legacy-peer-deps
fi
if [ $? -ne 0 ]; then
log_error "依赖安装失败"
exit 1
fi
log_success "依赖安装完成"
else
log_info "依赖已安装,跳过"
fi
# 构建
log_info "开始构建..."
echo ""
if npm run build; then
echo ""
log_success "构建完成!"
if [ -d "dist" ]; then
log_info "构建产物: $(pwd)/dist"
log_info "文件大小:"
du -sh dist
echo ""
log_info "文件列表:"
ls -lh dist/
else
log_warn "未找到 dist 目录"
fi
else
echo ""
log_error "构建失败"
exit 1
fi
echo ""
log_info "提示:"
echo " - 如果使用 Docker,请重启容器: docker compose restart xboard"
echo " - 如果直接运行,前端资源已更新"
echo ""