mirror of
https://github.com/skyle1995/NetworkAuth.git
synced 2026-05-25 02:24:05 +08:00
167 lines
5.4 KiB
Bash
Executable File
167 lines
5.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# 遇到错误立即退出
|
|
set -e
|
|
|
|
# ==========================================
|
|
# 切换到脚本所在目录
|
|
# ==========================================
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# ==========================================
|
|
# 颜色定义
|
|
# ==========================================
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# ==========================================
|
|
# 功能函数
|
|
# ==========================================
|
|
|
|
# 编译并拷贝前端
|
|
build_frontend() {
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -e "${YELLOW}🚀 开始编译前端项目...${NC}"
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
cd frontend
|
|
# 如果需要安装依赖可以取消注释下面这行
|
|
# pnpm install
|
|
pnpm run build
|
|
cd ..
|
|
echo -e "${GREEN}✅ 前端编译完成!${NC}\n"
|
|
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -e "${YELLOW}📂 正在将前端代码拷贝到后端 public 目录...${NC}"
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
# 清理旧的静态文件
|
|
rm -rf public/dist
|
|
# 确保 public 目录存在
|
|
mkdir -p public
|
|
# 将前端新编译的 dist 目录整个复制到 public 下 (使用 -R 增强跨平台兼容性)
|
|
cp -R frontend/dist public/
|
|
echo -e "${GREEN}✅ 前端代码拷贝完成!${NC}\n"
|
|
}
|
|
|
|
# 编译后端指定架构
|
|
build_backend() {
|
|
local os=$1
|
|
local arch=$2
|
|
local output_dir=$3
|
|
local desc=$4
|
|
|
|
# 确定可执行文件名称
|
|
local exe_name="NetworkAuth"
|
|
if [ "$os" = "NetworkAuth" ]; then
|
|
exe_name="NetworkAuth.exe"
|
|
fi
|
|
|
|
# 创建对应架构的输出目录
|
|
mkdir -p "dist/${output_dir}"
|
|
|
|
echo -e "${YELLOW}👉 正在编译 ${desc}...${NC}"
|
|
# 使用用户要求的精确命令格式(通过 -o 指定到子目录,但文件名保持原样)
|
|
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -trimpath --ldflags="-s -w" -o "dist/${output_dir}/${exe_name}"
|
|
echo -e "${GREEN}✅ 编译成功: dist/${output_dir}/${exe_name}${NC}\n"
|
|
}
|
|
|
|
# 编译所有后端架构
|
|
build_all_backend() {
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -e "${YELLOW}⚙️ 开始编译所有架构 Go 后端项目...${NC}"
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
build_backend "windows" "amd64" "windows_amd64" "Windows 64位"
|
|
build_backend "linux" "arm64" "linux_arm64" "Linux ARM64"
|
|
build_backend "linux" "amd64" "linux_amd64" "Linux 64位"
|
|
build_backend "darwin" "arm64" "darwin_arm64" "macOS (Apple Silicon)"
|
|
build_backend "darwin" "amd64" "darwin_amd64" "macOS (Intel)"
|
|
echo -e "${GREEN}🎉 所有架构编译完成,产物已保存至 ./dist 目录下!${NC}\n"
|
|
}
|
|
|
|
# ==========================================
|
|
# 辅助函数
|
|
# ==========================================
|
|
pause_and_return() {
|
|
echo -e "\n${YELLOW}按回车键返回主菜单...${NC}"
|
|
# 使用标准的 read -r 提升在 zsh 和各种不同 shell 中的跨平台兼容性
|
|
read -r
|
|
}
|
|
|
|
# ==========================================
|
|
# 菜单界面
|
|
# ==========================================
|
|
show_menu() {
|
|
clear
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -e "${GREEN} 项目构建脚本菜单 ${NC}"
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -e "1. 🚀 一键全部构建 (前端 + 所有架构后端)"
|
|
echo -e "2. 📦 仅编译所有后端架构"
|
|
echo -e "3. 🌐 仅编译前端并拷贝"
|
|
echo -e "-------------------------------------"
|
|
echo -e "4. 🪟 编译后端: Windows 64位"
|
|
echo -e "5. 🐧 编译后端: Linux ARM64"
|
|
echo -e "6. 🐧 编译后端: Linux 64位"
|
|
echo -e "7. 🍎 编译后端: macOS (Apple Silicon)"
|
|
echo -e "8. 🍎 编译后端: macOS (Intel)"
|
|
echo -e "-------------------------------------"
|
|
echo -e "0. ❌ 退出"
|
|
echo -e "${BLUE}=====================================${NC}"
|
|
echo -n -e "${YELLOW}请输入选项数字并按回车: ${NC}"
|
|
}
|
|
|
|
# ==========================================
|
|
# 主循环
|
|
# ==========================================
|
|
while true; do
|
|
show_menu
|
|
read choice
|
|
echo ""
|
|
case $choice in
|
|
1)
|
|
build_frontend
|
|
build_all_backend
|
|
pause_and_return
|
|
;;
|
|
2)
|
|
build_all_backend
|
|
pause_and_return
|
|
;;
|
|
3)
|
|
build_frontend
|
|
pause_and_return
|
|
;;
|
|
4)
|
|
build_backend "windows" "amd64" "windows_amd64" "Windows 64位"
|
|
pause_and_return
|
|
;;
|
|
5)
|
|
build_backend "linux" "arm64" "linux_arm64" "Linux ARM64"
|
|
pause_and_return
|
|
;;
|
|
6)
|
|
build_backend "linux" "amd64" "linux_amd64" "Linux 64位"
|
|
pause_and_return
|
|
;;
|
|
7)
|
|
build_backend "darwin" "arm64" "darwin_arm64" "macOS (Apple Silicon)"
|
|
pause_and_return
|
|
;;
|
|
8)
|
|
build_backend "darwin" "amd64" "darwin_amd64" "macOS (Intel)"
|
|
pause_and_return
|
|
;;
|
|
0)
|
|
echo -e "${GREEN}👋 退出脚本。${NC}"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}❌ 无效选项,请重新输入!${NC}"
|
|
sleep 1.5
|
|
;;
|
|
esac
|
|
done
|