Merge branch 'main' of https://gitea.aiotagro.com/ylweng/xlxumu
# Conflicts: # backend/api/server.js
This commit is contained in:
494
scripts/build.sh
Executable file
494
scripts/build.sh
Executable file
@@ -0,0 +1,494 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 智慧畜牧业小程序矩阵构建脚本
|
||||
# 用于批量构建所有小程序应用
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 小程序应用列表
|
||||
APPS=(
|
||||
"farming-manager:养殖管理小程序"
|
||||
"cattle-trading:牛只交易小程序"
|
||||
"beef-mall:牛肉商城小程序"
|
||||
"bank-supervision:银行监管小程序"
|
||||
"insurance-supervision:保险监管小程序"
|
||||
)
|
||||
|
||||
# 支持的平台
|
||||
PLATFORMS=(
|
||||
"mp-weixin:微信小程序"
|
||||
"mp-alipay:支付宝小程序"
|
||||
"mp-baidu:百度小程序"
|
||||
"mp-toutiao:字节跳动小程序"
|
||||
"mp-qq:QQ小程序"
|
||||
"h5:H5网页版"
|
||||
)
|
||||
|
||||
# 检查环境
|
||||
check_environment() {
|
||||
log_info "检查构建环境..."
|
||||
|
||||
# 检查 Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_error "Node.js 未安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 npm
|
||||
if ! command -v npm &> /dev/null; then
|
||||
log_error "npm 未安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查项目目录
|
||||
if [ ! -d "mini_program" ]; then
|
||||
log_error "mini_program 目录不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 package.json
|
||||
if [ ! -f "mini_program/package.json" ]; then
|
||||
log_error "package.json 文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "环境检查通过"
|
||||
}
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies() {
|
||||
log_info "安装项目依赖..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
if [ -f "package-lock.json" ]; then
|
||||
npm ci --silent
|
||||
else
|
||||
npm install --silent
|
||||
fi
|
||||
|
||||
log_success "依赖安装完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 清理构建文件
|
||||
clean_build() {
|
||||
log_info "清理构建文件..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 清理构建目录
|
||||
rm -rf dist/
|
||||
rm -rf unpackage/
|
||||
|
||||
# 清理各个小程序的构建文件
|
||||
for app_info in "${APPS[@]}"; do
|
||||
app_dir=$(echo $app_info | cut -d: -f1)
|
||||
if [ -d "$app_dir/dist" ]; then
|
||||
rm -rf "$app_dir/dist"
|
||||
fi
|
||||
if [ -d "$app_dir/unpackage" ]; then
|
||||
rm -rf "$app_dir/unpackage"
|
||||
fi
|
||||
done
|
||||
|
||||
log_success "清理完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 生成构建信息
|
||||
generate_build_info() {
|
||||
log_info "生成构建信息..."
|
||||
|
||||
local build_time=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
local git_commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
local git_branch=$(git branch --show-current 2>/dev/null || echo "unknown")
|
||||
local build_number=${BUILD_NUMBER:-$(date +"%Y%m%d%H%M%S")}
|
||||
|
||||
cat > mini_program/build-info.json << EOF
|
||||
{
|
||||
"buildTime": "$build_time",
|
||||
"buildNumber": "$build_number",
|
||||
"gitCommit": "$git_commit",
|
||||
"gitBranch": "$git_branch",
|
||||
"nodeVersion": "$(node --version)",
|
||||
"npmVersion": "$(npm --version)",
|
||||
"environment": "${BUILD_ENV:-production}"
|
||||
}
|
||||
EOF
|
||||
|
||||
log_success "构建信息生成完成"
|
||||
}
|
||||
|
||||
# 构建单个应用
|
||||
build_app() {
|
||||
local app_dir=$1
|
||||
local app_name=$2
|
||||
local platform=$3
|
||||
local platform_name=$4
|
||||
|
||||
log_info "构建 ${app_name} - ${platform_name}..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 设置当前构建的应用
|
||||
export UNI_INPUT_DIR="$app_dir"
|
||||
|
||||
# 执行构建命令
|
||||
case $platform in
|
||||
"mp-weixin")
|
||||
npm run build:mp-weixin --silent
|
||||
;;
|
||||
"mp-alipay")
|
||||
npm run build:mp-alipay --silent
|
||||
;;
|
||||
"mp-baidu")
|
||||
npm run build:mp-baidu --silent
|
||||
;;
|
||||
"mp-toutiao")
|
||||
npm run build:mp-toutiao --silent
|
||||
;;
|
||||
"mp-qq")
|
||||
npm run build:mp-qq --silent
|
||||
;;
|
||||
"h5")
|
||||
npm run build:h5 --silent
|
||||
;;
|
||||
*)
|
||||
log_error "不支持的平台: $platform"
|
||||
cd ..
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# 检查构建结果
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "${app_name} - ${platform_name} 构建成功"
|
||||
|
||||
# 移动构建文件到指定目录
|
||||
if [ -d "dist/build/$platform" ]; then
|
||||
mkdir -p "builds/$app_dir/$platform"
|
||||
cp -r "dist/build/$platform/"* "builds/$app_dir/$platform/"
|
||||
fi
|
||||
else
|
||||
log_error "${app_name} - ${platform_name} 构建失败"
|
||||
cd ..
|
||||
return 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 构建所有应用
|
||||
build_all_apps() {
|
||||
local target_platform=$1
|
||||
local target_app=$2
|
||||
|
||||
log_info "开始批量构建..."
|
||||
|
||||
# 创建构建输出目录
|
||||
mkdir -p mini_program/builds
|
||||
|
||||
local success_count=0
|
||||
local total_count=0
|
||||
|
||||
for app_info in "${APPS[@]}"; do
|
||||
app_dir=$(echo $app_info | cut -d: -f1)
|
||||
app_name=$(echo $app_info | cut -d: -f2)
|
||||
|
||||
# 如果指定了特定应用,只构建该应用
|
||||
if [ -n "$target_app" ] && [ "$target_app" != "$app_dir" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# 检查应用目录是否存在
|
||||
if [ ! -d "mini_program/$app_dir" ]; then
|
||||
log_warning "应用目录不存在: $app_dir"
|
||||
continue
|
||||
fi
|
||||
|
||||
for platform_info in "${PLATFORMS[@]}"; do
|
||||
platform=$(echo $platform_info | cut -d: -f1)
|
||||
platform_name=$(echo $platform_info | cut -d: -f2)
|
||||
|
||||
# 如果指定了特定平台,只构建该平台
|
||||
if [ -n "$target_platform" ] && [ "$target_platform" != "$platform" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
total_count=$((total_count + 1))
|
||||
|
||||
if build_app "$app_dir" "$app_name" "$platform" "$platform_name"; then
|
||||
success_count=$((success_count + 1))
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
log_info "构建完成: $success_count/$total_count 成功"
|
||||
|
||||
if [ $success_count -eq $total_count ]; then
|
||||
log_success "所有应用构建成功!"
|
||||
return 0
|
||||
else
|
||||
log_warning "部分应用构建失败"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 生成构建报告
|
||||
generate_build_report() {
|
||||
log_info "生成构建报告..."
|
||||
|
||||
local report_file="mini_program/builds/build-report.html"
|
||||
local build_time=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
|
||||
cat > "$report_file" << EOF
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>构建报告 - 智慧畜牧业小程序矩阵</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; margin: 20px; }
|
||||
.header { background: #2E8B57; color: white; padding: 20px; border-radius: 8px; }
|
||||
.summary { margin: 20px 0; padding: 15px; background: #f5f5f5; border-radius: 8px; }
|
||||
.apps { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
|
||||
.app-card { border: 1px solid #ddd; border-radius: 8px; padding: 15px; }
|
||||
.app-title { font-size: 18px; font-weight: bold; margin-bottom: 10px; }
|
||||
.platform { margin: 5px 0; padding: 5px 10px; border-radius: 4px; }
|
||||
.success { background: #d4edda; color: #155724; }
|
||||
.error { background: #f8d7da; color: #721c24; }
|
||||
.footer { margin-top: 30px; text-align: center; color: #666; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>智慧畜牧业小程序矩阵 - 构建报告</h1>
|
||||
<p>构建时间: $build_time</p>
|
||||
</div>
|
||||
|
||||
<div class="summary">
|
||||
<h2>构建概要</h2>
|
||||
<p>本次构建包含 ${#APPS[@]} 个小程序应用,支持 ${#PLATFORMS[@]} 个平台</p>
|
||||
</div>
|
||||
|
||||
<div class="apps">
|
||||
EOF
|
||||
|
||||
# 添加每个应用的构建状态
|
||||
for app_info in "${APPS[@]}"; do
|
||||
app_dir=$(echo $app_info | cut -d: -f1)
|
||||
app_name=$(echo $app_info | cut -d: -f2)
|
||||
|
||||
cat >> "$report_file" << EOF
|
||||
<div class="app-card">
|
||||
<div class="app-title">$app_name</div>
|
||||
EOF
|
||||
|
||||
for platform_info in "${PLATFORMS[@]}"; do
|
||||
platform=$(echo $platform_info | cut -d: -f1)
|
||||
platform_name=$(echo $platform_info | cut -d: -f2)
|
||||
|
||||
if [ -d "mini_program/builds/$app_dir/$platform" ]; then
|
||||
echo " <div class=\"platform success\">✓ $platform_name</div>" >> "$report_file"
|
||||
else
|
||||
echo " <div class=\"platform error\">✗ $platform_name</div>" >> "$report_file"
|
||||
fi
|
||||
done
|
||||
|
||||
echo " </div>" >> "$report_file"
|
||||
done
|
||||
|
||||
cat >> "$report_file" << EOF
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2024 智慧畜牧业小程序矩阵</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
log_success "构建报告已生成: $report_file"
|
||||
}
|
||||
|
||||
# 压缩构建文件
|
||||
compress_builds() {
|
||||
log_info "压缩构建文件..."
|
||||
|
||||
cd mini_program/builds
|
||||
|
||||
local archive_name="xlxumu-miniprogram-builds-$(date +%Y%m%d_%H%M%S).tar.gz"
|
||||
|
||||
tar -czf "$archive_name" */
|
||||
|
||||
log_success "构建文件已压缩: builds/$archive_name"
|
||||
cd ../..
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "智慧畜牧业小程序矩阵构建脚本"
|
||||
echo ""
|
||||
echo "用法:"
|
||||
echo " $0 [选项] [平台] [应用]"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -c, --clean 清理构建文件"
|
||||
echo " -r, --report 生成构建报告"
|
||||
echo " -z, --zip 压缩构建文件"
|
||||
echo ""
|
||||
echo "参数:"
|
||||
echo " 平台 目标平台 (mp-weixin|mp-alipay|mp-baidu|mp-toutiao|mp-qq|h5)"
|
||||
echo " 应用 目标应用 (farming-manager|cattle-trading|beef-mall|bank-supervision|insurance-supervision)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 # 构建所有应用的所有平台"
|
||||
echo " $0 mp-weixin # 构建所有应用的微信小程序版本"
|
||||
echo " $0 mp-weixin farming-manager # 构建养殖管理小程序的微信版本"
|
||||
echo " $0 --clean # 清理构建文件"
|
||||
echo " $0 --report # 生成构建报告"
|
||||
echo ""
|
||||
echo "支持的平台:"
|
||||
for platform_info in "${PLATFORMS[@]}"; do
|
||||
platform=$(echo $platform_info | cut -d: -f1)
|
||||
platform_name=$(echo $platform_info | cut -d: -f2)
|
||||
echo " $platform$(printf '%*s' $((15-${#platform})) '') $platform_name"
|
||||
done
|
||||
echo ""
|
||||
echo "支持的应用:"
|
||||
for app_info in "${APPS[@]}"; do
|
||||
app_dir=$(echo $app_info | cut -d: -f1)
|
||||
app_name=$(echo $app_info | cut -d: -f2)
|
||||
echo " $app_dir$(printf '%*s' $((20-${#app_dir})) '') $app_name"
|
||||
done
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
local clean_only=false
|
||||
local report_only=false
|
||||
local compress_only=false
|
||||
local target_platform=""
|
||||
local target_app=""
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-c|--clean)
|
||||
clean_only=true
|
||||
shift
|
||||
;;
|
||||
-r|--report)
|
||||
report_only=true
|
||||
shift
|
||||
;;
|
||||
-z|--zip)
|
||||
compress_only=true
|
||||
shift
|
||||
;;
|
||||
mp-weixin|mp-alipay|mp-baidu|mp-toutiao|mp-qq|h5)
|
||||
target_platform=$1
|
||||
shift
|
||||
;;
|
||||
farming-manager|cattle-trading|beef-mall|bank-supervision|insurance-supervision)
|
||||
target_app=$1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查环境
|
||||
check_environment
|
||||
|
||||
# 执行相应操作
|
||||
if [ "$clean_only" = true ]; then
|
||||
clean_build
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$report_only" = true ]; then
|
||||
generate_build_report
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$compress_only" = true ]; then
|
||||
compress_builds
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 执行完整构建流程
|
||||
log_info "开始构建智慧畜牧业小程序矩阵"
|
||||
|
||||
# 清理旧文件
|
||||
clean_build
|
||||
|
||||
# 生成构建信息
|
||||
generate_build_info
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies
|
||||
|
||||
# 构建所有应用
|
||||
if build_all_apps "$target_platform" "$target_app"; then
|
||||
# 生成构建报告
|
||||
generate_build_report
|
||||
|
||||
# 压缩构建文件
|
||||
compress_builds
|
||||
|
||||
log_success "构建完成!"
|
||||
exit 0
|
||||
else
|
||||
log_error "构建失败!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
error_handler() {
|
||||
local line_number=$1
|
||||
log_error "脚本在第 $line_number 行出错"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 设置错误处理
|
||||
trap 'error_handler $LINENO' ERR
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
281
scripts/deploy.sh
Executable file
281
scripts/deploy.sh
Executable file
@@ -0,0 +1,281 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 智慧畜牧业小程序矩阵部署脚本
|
||||
# 用于自动化部署小程序到各个平台
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查必要的工具
|
||||
check_dependencies() {
|
||||
log_info "检查依赖工具..."
|
||||
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_error "Node.js 未安装,请先安装 Node.js"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v npm &> /dev/null; then
|
||||
log_error "npm 未安装,请先安装 npm"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "依赖工具检查完成"
|
||||
}
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies() {
|
||||
log_info "安装项目依赖..."
|
||||
cd mini_program
|
||||
|
||||
if [ -f "package-lock.json" ]; then
|
||||
npm ci
|
||||
else
|
||||
npm install
|
||||
fi
|
||||
|
||||
log_success "依赖安装完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 构建项目
|
||||
build_project() {
|
||||
local platform=$1
|
||||
local app_name=$2
|
||||
|
||||
log_info "构建 ${app_name} (${platform})..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
case $platform in
|
||||
"mp-weixin")
|
||||
npm run build:mp-weixin
|
||||
;;
|
||||
"mp-alipay")
|
||||
npm run build:mp-alipay
|
||||
;;
|
||||
"mp-baidu")
|
||||
npm run build:mp-baidu
|
||||
;;
|
||||
"mp-toutiao")
|
||||
npm run build:mp-toutiao
|
||||
;;
|
||||
"mp-qq")
|
||||
npm run build:mp-qq
|
||||
;;
|
||||
"h5")
|
||||
npm run build:h5
|
||||
;;
|
||||
"app-plus")
|
||||
npm run build:app-plus
|
||||
;;
|
||||
*)
|
||||
log_error "不支持的平台: $platform"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
log_success "${app_name} 构建完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 部署到服务器
|
||||
deploy_to_server() {
|
||||
local platform=$1
|
||||
local server_path=$2
|
||||
|
||||
log_info "部署到服务器..."
|
||||
|
||||
if [ -z "$server_path" ]; then
|
||||
log_warning "未指定服务器路径,跳过服务器部署"
|
||||
return
|
||||
fi
|
||||
|
||||
# 这里可以添加具体的部署逻辑
|
||||
# 例如:rsync、scp、ftp 等
|
||||
|
||||
log_success "服务器部署完成"
|
||||
}
|
||||
|
||||
# 生成版本信息
|
||||
generate_version_info() {
|
||||
log_info "生成版本信息..."
|
||||
|
||||
local version=$(date +"%Y%m%d%H%M%S")
|
||||
local git_commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
local build_time=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
|
||||
cat > mini_program/version.json << EOF
|
||||
{
|
||||
"version": "$version",
|
||||
"gitCommit": "$git_commit",
|
||||
"buildTime": "$build_time",
|
||||
"environment": "${ENVIRONMENT:-production}"
|
||||
}
|
||||
EOF
|
||||
|
||||
log_success "版本信息生成完成"
|
||||
}
|
||||
|
||||
# 清理构建文件
|
||||
cleanup() {
|
||||
log_info "清理构建文件..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 清理各平台构建文件
|
||||
rm -rf dist/
|
||||
rm -rf unpackage/
|
||||
|
||||
log_success "清理完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 验证构建结果
|
||||
validate_build() {
|
||||
local platform=$1
|
||||
|
||||
log_info "验证构建结果..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
case $platform in
|
||||
"mp-weixin")
|
||||
if [ ! -d "dist/build/mp-weixin" ]; then
|
||||
log_error "微信小程序构建失败"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
"h5")
|
||||
if [ ! -d "dist/build/h5" ]; then
|
||||
log_error "H5 构建失败"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
log_success "构建结果验证通过"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 发送通知
|
||||
send_notification() {
|
||||
local status=$1
|
||||
local message=$2
|
||||
|
||||
# 这里可以添加通知逻辑
|
||||
# 例如:钉钉、企业微信、邮件等
|
||||
|
||||
log_info "发送通知: $message"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
local platform=${1:-"mp-weixin"}
|
||||
local app_name=${2:-"智慧畜牧业小程序"}
|
||||
local environment=${3:-"production"}
|
||||
local server_path=$4
|
||||
|
||||
export ENVIRONMENT=$environment
|
||||
|
||||
log_info "开始部署 ${app_name}"
|
||||
log_info "平台: $platform"
|
||||
log_info "环境: $environment"
|
||||
|
||||
# 检查依赖
|
||||
check_dependencies
|
||||
|
||||
# 清理旧文件
|
||||
cleanup
|
||||
|
||||
# 生成版本信息
|
||||
generate_version_info
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies
|
||||
|
||||
# 构建项目
|
||||
build_project $platform $app_name
|
||||
|
||||
# 验证构建结果
|
||||
validate_build $platform
|
||||
|
||||
# 部署到服务器
|
||||
deploy_to_server $platform $server_path
|
||||
|
||||
log_success "部署完成!"
|
||||
|
||||
# 发送成功通知
|
||||
send_notification "success" "${app_name} 部署成功"
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "智慧畜牧业小程序矩阵部署脚本"
|
||||
echo ""
|
||||
echo "用法:"
|
||||
echo " $0 [平台] [应用名称] [环境] [服务器路径]"
|
||||
echo ""
|
||||
echo "参数:"
|
||||
echo " 平台 目标平台 (mp-weixin|mp-alipay|mp-baidu|mp-toutiao|mp-qq|h5|app-plus)"
|
||||
echo " 应用名称 应用名称 (默认: 智慧畜牧业小程序)"
|
||||
echo " 环境 部署环境 (development|testing|production)"
|
||||
echo " 服务器路径 服务器部署路径 (可选)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 mp-weixin 养殖管理小程序 production"
|
||||
echo " $0 h5 牛肉商城 testing /var/www/html"
|
||||
echo " $0 mp-alipay 银行监管小程序 production"
|
||||
echo ""
|
||||
echo "支持的平台:"
|
||||
echo " mp-weixin 微信小程序"
|
||||
echo " mp-alipay 支付宝小程序"
|
||||
echo " mp-baidu 百度小程序"
|
||||
echo " mp-toutiao 字节跳动小程序"
|
||||
echo " mp-qq QQ小程序"
|
||||
echo " h5 H5网页版"
|
||||
echo " app-plus 原生App"
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
error_handler() {
|
||||
local line_number=$1
|
||||
log_error "脚本在第 $line_number 行出错"
|
||||
send_notification "error" "部署失败,请检查日志"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 设置错误处理
|
||||
trap 'error_handler $LINENO' ERR
|
||||
|
||||
# 检查参数
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
show_help
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
465
scripts/init.sh
Executable file
465
scripts/init.sh
Executable file
@@ -0,0 +1,465 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 智慧畜牧业小程序矩阵初始化脚本
|
||||
# 用于快速搭建开发环境和初始化项目
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 显示欢迎信息
|
||||
show_welcome() {
|
||||
echo -e "${GREEN}"
|
||||
echo "=================================================="
|
||||
echo " 智慧畜牧业小程序矩阵 - 项目初始化脚本"
|
||||
echo "=================================================="
|
||||
echo -e "${NC}"
|
||||
echo "本脚本将帮助您快速搭建开发环境并初始化项目"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 检查系统环境
|
||||
check_system() {
|
||||
log_info "检查系统环境..."
|
||||
|
||||
# 检查操作系统
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
OS="Linux"
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
OS="macOS"
|
||||
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
||||
OS="Windows"
|
||||
else
|
||||
OS="Unknown"
|
||||
fi
|
||||
|
||||
log_info "操作系统: $OS"
|
||||
|
||||
# 检查必要工具
|
||||
local missing_tools=()
|
||||
|
||||
if ! command -v git &> /dev/null; then
|
||||
missing_tools+=("git")
|
||||
fi
|
||||
|
||||
if ! command -v node &> /dev/null; then
|
||||
missing_tools+=("node")
|
||||
fi
|
||||
|
||||
if ! command -v npm &> /dev/null; then
|
||||
missing_tools+=("npm")
|
||||
fi
|
||||
|
||||
if [ ${#missing_tools[@]} -gt 0 ]; then
|
||||
log_error "缺少必要工具: ${missing_tools[*]}"
|
||||
log_info "请先安装以下工具:"
|
||||
for tool in "${missing_tools[@]}"; do
|
||||
echo " - $tool"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "系统环境检查通过"
|
||||
}
|
||||
|
||||
# 检查Node.js版本
|
||||
check_node_version() {
|
||||
log_info "检查Node.js版本..."
|
||||
|
||||
local node_version=$(node --version | sed 's/v//')
|
||||
local major_version=$(echo $node_version | cut -d. -f1)
|
||||
|
||||
if [ "$major_version" -lt 14 ]; then
|
||||
log_error "Node.js版本过低 (当前: $node_version,要求: >= 14.0.0)"
|
||||
log_info "请升级Node.js到14.0.0或更高版本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Node.js版本检查通过 (版本: $node_version)"
|
||||
}
|
||||
|
||||
# 初始化项目目录
|
||||
init_project_structure() {
|
||||
log_info "初始化项目目录结构..."
|
||||
|
||||
# 确保在正确的目录
|
||||
if [ ! -f "README.md" ]; then
|
||||
log_error "请在项目根目录下运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 创建必要的目录
|
||||
local directories=(
|
||||
"mini_program/builds"
|
||||
"mini_program/tests"
|
||||
"mini_program/docs"
|
||||
"logs"
|
||||
"temp"
|
||||
)
|
||||
|
||||
for dir in "${directories[@]}"; do
|
||||
if [ ! -d "$dir" ]; then
|
||||
mkdir -p "$dir"
|
||||
log_info "创建目录: $dir"
|
||||
fi
|
||||
done
|
||||
|
||||
log_success "项目目录结构初始化完成"
|
||||
}
|
||||
|
||||
# 安装项目依赖
|
||||
install_dependencies() {
|
||||
log_info "安装项目依赖..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 检查package.json是否存在
|
||||
if [ ! -f "package.json" ]; then
|
||||
log_error "package.json文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 清理旧的依赖
|
||||
if [ -d "node_modules" ]; then
|
||||
log_info "清理旧的依赖..."
|
||||
rm -rf node_modules
|
||||
fi
|
||||
|
||||
if [ -f "package-lock.json" ]; then
|
||||
rm -f package-lock.json
|
||||
fi
|
||||
|
||||
# 安装依赖
|
||||
log_info "正在安装依赖,请稍候..."
|
||||
if npm install --silent; then
|
||||
log_success "依赖安装完成"
|
||||
else
|
||||
log_error "依赖安装失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 配置开发环境
|
||||
setup_dev_environment() {
|
||||
log_info "配置开发环境..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 复制环境配置文件
|
||||
if [ ! -f ".env.local" ]; then
|
||||
if [ -f ".env.development" ]; then
|
||||
cp .env.development .env.local
|
||||
log_info "创建本地环境配置文件"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 设置Git hooks
|
||||
if [ -d ".git" ]; then
|
||||
# 创建pre-commit hook
|
||||
cat > .git/hooks/pre-commit << 'EOF'
|
||||
#!/bin/bash
|
||||
# 运行代码检查
|
||||
npm run lint
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "代码检查失败,请修复后再提交"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 运行测试
|
||||
npm test
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "测试失败,请修复后再提交"
|
||||
exit 1
|
||||
fi
|
||||
EOF
|
||||
chmod +x .git/hooks/pre-commit
|
||||
log_info "设置Git pre-commit hook"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
||||
log_success "开发环境配置完成"
|
||||
}
|
||||
|
||||
# 初始化数据库
|
||||
init_database() {
|
||||
log_info "初始化数据库..."
|
||||
|
||||
# 这里可以添加数据库初始化逻辑
|
||||
# 例如:运行SQL脚本、创建表结构等
|
||||
|
||||
log_info "数据库初始化功能待实现"
|
||||
}
|
||||
|
||||
# 生成开发文档
|
||||
generate_docs() {
|
||||
log_info "生成开发文档..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 生成API文档
|
||||
if command -v jsdoc &> /dev/null; then
|
||||
jsdoc -c jsdoc.conf.json
|
||||
log_info "API文档生成完成"
|
||||
else
|
||||
log_warning "JSDoc未安装,跳过API文档生成"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
||||
log_success "文档生成完成"
|
||||
}
|
||||
|
||||
# 运行初始测试
|
||||
run_initial_tests() {
|
||||
log_info "运行初始测试..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 运行代码检查
|
||||
if npm run lint &> /dev/null; then
|
||||
log_success "代码检查通过"
|
||||
else
|
||||
log_warning "代码检查发现问题,建议修复"
|
||||
fi
|
||||
|
||||
# 运行单元测试
|
||||
if npm test &> /dev/null; then
|
||||
log_success "单元测试通过"
|
||||
else
|
||||
log_warning "单元测试发现问题,建议检查"
|
||||
fi
|
||||
|
||||
# 尝试构建项目
|
||||
if npm run build:h5 &> /dev/null; then
|
||||
log_success "项目构建成功"
|
||||
else
|
||||
log_warning "项目构建失败,请检查配置"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 创建开发者配置
|
||||
create_dev_config() {
|
||||
log_info "创建开发者配置..."
|
||||
|
||||
# 获取用户信息
|
||||
read -p "请输入您的姓名: " dev_name
|
||||
read -p "请输入您的邮箱: " dev_email
|
||||
|
||||
# 创建开发者配置文件
|
||||
cat > .devconfig << EOF
|
||||
# 开发者配置文件
|
||||
DEV_NAME="$dev_name"
|
||||
DEV_EMAIL="$dev_email"
|
||||
INIT_DATE="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||
PROJECT_VERSION="1.0.0"
|
||||
EOF
|
||||
|
||||
# 配置Git用户信息
|
||||
if [ -n "$dev_name" ] && [ -n "$dev_email" ]; then
|
||||
git config user.name "$dev_name"
|
||||
git config user.email "$dev_email"
|
||||
log_info "Git用户信息配置完成"
|
||||
fi
|
||||
|
||||
log_success "开发者配置创建完成"
|
||||
}
|
||||
|
||||
# 显示完成信息
|
||||
show_completion() {
|
||||
echo ""
|
||||
echo -e "${GREEN}=================================================="
|
||||
echo " 项目初始化完成!"
|
||||
echo "==================================================${NC}"
|
||||
echo ""
|
||||
echo "🎉 恭喜!智慧畜牧业小程序矩阵项目已成功初始化"
|
||||
echo ""
|
||||
echo "📁 项目结构:"
|
||||
echo " ├── mini_program/ # 小程序源码"
|
||||
echo " ├── scripts/ # 构建脚本"
|
||||
echo " ├── docs/ # 项目文档"
|
||||
echo " └── README.md # 项目说明"
|
||||
echo ""
|
||||
echo "🚀 快速开始:"
|
||||
echo " cd mini_program"
|
||||
echo " npm run dev:mp-weixin # 启动微信小程序开发"
|
||||
echo " npm run dev:h5 # 启动H5开发"
|
||||
echo " npm run build:all # 构建所有平台"
|
||||
echo ""
|
||||
echo "🛠️ 常用命令:"
|
||||
echo " npm run lint # 代码检查"
|
||||
echo " npm run test # 运行测试"
|
||||
echo " npm run format # 代码格式化"
|
||||
echo " ./scripts/build.sh # 批量构建"
|
||||
echo " ./scripts/deploy.sh # 部署脚本"
|
||||
echo ""
|
||||
echo "📚 文档地址:"
|
||||
echo " - 技术文档: docs/development/"
|
||||
echo " - API文档: mini_program/docs/"
|
||||
echo " - 项目说明: README.md"
|
||||
echo ""
|
||||
echo "❓ 需要帮助?"
|
||||
echo " - 查看文档: cat README.md"
|
||||
echo " - 运行帮助: ./scripts/build.sh --help"
|
||||
echo " - 联系团队: dev@xlxumu.com"
|
||||
echo ""
|
||||
echo -e "${YELLOW}注意事项:${NC}"
|
||||
echo " 1. 请确保已安装微信开发者工具"
|
||||
echo " 2. 开发前请阅读技术文档"
|
||||
echo " 3. 提交代码前请运行测试"
|
||||
echo ""
|
||||
echo -e "${GREEN}祝您开发愉快!${NC}"
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
error_handler() {
|
||||
local line_number=$1
|
||||
log_error "初始化脚本在第 $line_number 行出错"
|
||||
log_error "请检查错误信息并重新运行脚本"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 清理函数
|
||||
cleanup() {
|
||||
log_info "清理临时文件..."
|
||||
# 清理可能的临时文件
|
||||
rm -f temp_*
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "智慧畜牧业小程序矩阵 - 项目初始化脚本"
|
||||
echo ""
|
||||
echo "用法:"
|
||||
echo " $0 [选项]"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -q, --quiet 静默模式,减少输出"
|
||||
echo " -f, --force 强制重新初始化"
|
||||
echo " --skip-deps 跳过依赖安装"
|
||||
echo " --skip-tests 跳过初始测试"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 # 完整初始化"
|
||||
echo " $0 --quiet # 静默初始化"
|
||||
echo " $0 --force # 强制重新初始化"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
local quiet_mode=false
|
||||
local force_mode=false
|
||||
local skip_deps=false
|
||||
local skip_tests=false
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-q|--quiet)
|
||||
quiet_mode=true
|
||||
shift
|
||||
;;
|
||||
-f|--force)
|
||||
force_mode=true
|
||||
shift
|
||||
;;
|
||||
--skip-deps)
|
||||
skip_deps=true
|
||||
shift
|
||||
;;
|
||||
--skip-tests)
|
||||
skip_tests=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 设置静默模式
|
||||
if [ "$quiet_mode" = true ]; then
|
||||
exec > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
# 显示欢迎信息
|
||||
if [ "$quiet_mode" = false ]; then
|
||||
show_welcome
|
||||
fi
|
||||
|
||||
# 检查是否已初始化
|
||||
if [ -f ".devconfig" ] && [ "$force_mode" = false ]; then
|
||||
log_warning "项目似乎已经初始化过了"
|
||||
read -p "是否要重新初始化?(y/N): " confirm
|
||||
if [[ ! $confirm =~ ^[Yy]$ ]]; then
|
||||
log_info "初始化已取消"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 执行初始化步骤
|
||||
check_system
|
||||
check_node_version
|
||||
init_project_structure
|
||||
|
||||
if [ "$skip_deps" = false ]; then
|
||||
install_dependencies
|
||||
fi
|
||||
|
||||
setup_dev_environment
|
||||
init_database
|
||||
generate_docs
|
||||
|
||||
if [ "$skip_tests" = false ]; then
|
||||
run_initial_tests
|
||||
fi
|
||||
|
||||
create_dev_config
|
||||
|
||||
# 显示完成信息
|
||||
if [ "$quiet_mode" = false ]; then
|
||||
show_completion
|
||||
fi
|
||||
|
||||
log_success "项目初始化完成!"
|
||||
}
|
||||
|
||||
# 设置错误处理和清理
|
||||
trap 'error_handler $LINENO' ERR
|
||||
trap cleanup EXIT
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
464
scripts/test.sh
Executable file
464
scripts/test.sh
Executable file
@@ -0,0 +1,464 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 智慧畜牧业小程序矩阵测试脚本
|
||||
# 用于运行各种测试和代码质量检查
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查环境
|
||||
check_environment() {
|
||||
log_info "检查测试环境..."
|
||||
|
||||
# 检查 Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_error "Node.js 未安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 npm
|
||||
if ! command -v npm &> /dev/null; then
|
||||
log_error "npm 未安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查项目目录
|
||||
if [ ! -d "mini_program" ]; then
|
||||
log_error "mini_program 目录不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "环境检查通过"
|
||||
}
|
||||
|
||||
# 安装测试依赖
|
||||
install_test_dependencies() {
|
||||
log_info "安装测试依赖..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 检查是否已安装测试相关依赖
|
||||
if ! npm list jest &> /dev/null; then
|
||||
npm install --save-dev jest @vue/test-utils
|
||||
fi
|
||||
|
||||
if ! npm list eslint &> /dev/null; then
|
||||
npm install --save-dev eslint @vue/eslint-config-typescript
|
||||
fi
|
||||
|
||||
if ! npm list prettier &> /dev/null; then
|
||||
npm install --save-dev prettier
|
||||
fi
|
||||
|
||||
log_success "测试依赖安装完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 代码格式检查
|
||||
check_code_format() {
|
||||
log_info "检查代码格式..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 检查 Prettier 格式
|
||||
if command -v npx &> /dev/null; then
|
||||
if npx prettier --check "**/*.{js,vue,ts,json,md}" 2>/dev/null; then
|
||||
log_success "代码格式检查通过"
|
||||
else
|
||||
log_warning "代码格式不符合规范,建议运行 npm run format 修复"
|
||||
fi
|
||||
else
|
||||
log_warning "Prettier 未安装,跳过格式检查"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 代码质量检查
|
||||
check_code_quality() {
|
||||
log_info "检查代码质量..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# ESLint 检查
|
||||
if command -v npx &> /dev/null; then
|
||||
if npx eslint "**/*.{js,vue,ts}" --quiet 2>/dev/null; then
|
||||
log_success "代码质量检查通过"
|
||||
else
|
||||
log_warning "发现代码质量问题,建议运行 npm run lint 查看详情"
|
||||
fi
|
||||
else
|
||||
log_warning "ESLint 未安装,跳过质量检查"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 运行单元测试
|
||||
run_unit_tests() {
|
||||
log_info "运行单元测试..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 检查是否有测试文件
|
||||
if find . -name "*.test.js" -o -name "*.spec.js" | grep -q .; then
|
||||
if npm test 2>/dev/null; then
|
||||
log_success "单元测试通过"
|
||||
else
|
||||
log_error "单元测试失败"
|
||||
cd ..
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_warning "未找到测试文件,跳过单元测试"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 检查依赖安全性
|
||||
check_security() {
|
||||
log_info "检查依赖安全性..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# npm audit 检查
|
||||
if npm audit --audit-level moderate 2>/dev/null; then
|
||||
log_success "依赖安全检查通过"
|
||||
else
|
||||
log_warning "发现安全漏洞,建议运行 npm audit fix 修复"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 检查包大小
|
||||
check_bundle_size() {
|
||||
log_info "检查包大小..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 构建项目并检查大小
|
||||
if npm run build:h5 &> /dev/null; then
|
||||
if [ -d "dist" ]; then
|
||||
local size=$(du -sh dist 2>/dev/null | cut -f1)
|
||||
log_info "构建包大小: $size"
|
||||
|
||||
# 检查是否超过限制 (例如 10MB)
|
||||
local size_bytes=$(du -s dist 2>/dev/null | cut -f1)
|
||||
if [ "$size_bytes" -gt 10240 ]; then # 10MB = 10240KB
|
||||
log_warning "构建包较大,建议优化"
|
||||
else
|
||||
log_success "构建包大小合理"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_warning "构建失败,无法检查包大小"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 性能测试
|
||||
run_performance_tests() {
|
||||
log_info "运行性能测试..."
|
||||
|
||||
# 这里可以添加性能测试逻辑
|
||||
# 例如:Lighthouse、WebPageTest 等
|
||||
|
||||
log_info "性能测试功能待实现"
|
||||
}
|
||||
|
||||
# 兼容性测试
|
||||
run_compatibility_tests() {
|
||||
log_info "运行兼容性测试..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 检查各平台构建是否成功
|
||||
local platforms=("mp-weixin" "mp-alipay" "h5")
|
||||
local success_count=0
|
||||
|
||||
for platform in "${platforms[@]}"; do
|
||||
log_info "测试 $platform 平台兼容性..."
|
||||
|
||||
if npm run "build:$platform" &> /dev/null; then
|
||||
log_success "$platform 平台兼容性测试通过"
|
||||
success_count=$((success_count + 1))
|
||||
else
|
||||
log_error "$platform 平台兼容性测试失败"
|
||||
fi
|
||||
done
|
||||
|
||||
log_info "兼容性测试完成: $success_count/${#platforms[@]} 平台通过"
|
||||
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 生成测试报告
|
||||
generate_test_report() {
|
||||
log_info "生成测试报告..."
|
||||
|
||||
local report_file="test-report.html"
|
||||
local test_time=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
|
||||
cat > "$report_file" << EOF
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>测试报告 - 智慧畜牧业小程序矩阵</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; margin: 20px; }
|
||||
.header { background: #2E8B57; color: white; padding: 20px; border-radius: 8px; }
|
||||
.section { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 8px; }
|
||||
.success { border-left: 4px solid #28a745; }
|
||||
.warning { border-left: 4px solid #ffc107; }
|
||||
.error { border-left: 4px solid #dc3545; }
|
||||
.test-item { margin: 10px 0; padding: 10px; background: #f8f9fa; border-radius: 4px; }
|
||||
.footer { margin-top: 30px; text-align: center; color: #666; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>智慧畜牧业小程序矩阵 - 测试报告</h1>
|
||||
<p>测试时间: $test_time</p>
|
||||
</div>
|
||||
|
||||
<div class="section success">
|
||||
<h2>✓ 测试概要</h2>
|
||||
<p>本次测试包含代码格式检查、质量检查、单元测试、安全检查等多个方面</p>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>测试项目</h2>
|
||||
<div class="test-item">代码格式检查 - Prettier</div>
|
||||
<div class="test-item">代码质量检查 - ESLint</div>
|
||||
<div class="test-item">单元测试 - Jest</div>
|
||||
<div class="test-item">依赖安全检查 - npm audit</div>
|
||||
<div class="test-item">包大小检查</div>
|
||||
<div class="test-item">兼容性测试</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>© 2024 智慧畜牧业小程序矩阵</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
log_success "测试报告已生成: $report_file"
|
||||
}
|
||||
|
||||
# 清理测试文件
|
||||
cleanup_test_files() {
|
||||
log_info "清理测试文件..."
|
||||
|
||||
cd mini_program
|
||||
|
||||
# 清理构建文件
|
||||
rm -rf dist/
|
||||
rm -rf unpackage/
|
||||
rm -rf coverage/
|
||||
|
||||
log_success "测试文件清理完成"
|
||||
cd ..
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "智慧畜牧业小程序矩阵测试脚本"
|
||||
echo ""
|
||||
echo "用法:"
|
||||
echo " $0 [选项]"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -f, --format 只运行代码格式检查"
|
||||
echo " -q, --quality 只运行代码质量检查"
|
||||
echo " -u, --unit 只运行单元测试"
|
||||
echo " -s, --security 只运行安全检查"
|
||||
echo " -p, --performance 只运行性能测试"
|
||||
echo " -c, --compatibility 只运行兼容性测试"
|
||||
echo " -r, --report 生成测试报告"
|
||||
echo " --clean 清理测试文件"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 # 运行所有测试"
|
||||
echo " $0 --format # 只检查代码格式"
|
||||
echo " $0 --unit # 只运行单元测试"
|
||||
echo " $0 --report # 生成测试报告"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
local format_only=false
|
||||
local quality_only=false
|
||||
local unit_only=false
|
||||
local security_only=false
|
||||
local performance_only=false
|
||||
local compatibility_only=false
|
||||
local report_only=false
|
||||
local clean_only=false
|
||||
local run_all=true
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-f|--format)
|
||||
format_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-q|--quality)
|
||||
quality_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-u|--unit)
|
||||
unit_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-s|--security)
|
||||
security_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-p|--performance)
|
||||
performance_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-c|--compatibility)
|
||||
compatibility_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
-r|--report)
|
||||
report_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
--clean)
|
||||
clean_only=true
|
||||
run_all=false
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查环境
|
||||
check_environment
|
||||
|
||||
# 执行相应操作
|
||||
if [ "$clean_only" = true ]; then
|
||||
cleanup_test_files
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$report_only" = true ]; then
|
||||
generate_test_report
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 安装测试依赖
|
||||
install_test_dependencies
|
||||
|
||||
log_info "开始运行测试..."
|
||||
|
||||
local test_passed=true
|
||||
|
||||
# 运行指定的测试或所有测试
|
||||
if [ "$format_only" = true ] || [ "$run_all" = true ]; then
|
||||
check_code_format || test_passed=false
|
||||
fi
|
||||
|
||||
if [ "$quality_only" = true ] || [ "$run_all" = true ]; then
|
||||
check_code_quality || test_passed=false
|
||||
fi
|
||||
|
||||
if [ "$unit_only" = true ] || [ "$run_all" = true ]; then
|
||||
run_unit_tests || test_passed=false
|
||||
fi
|
||||
|
||||
if [ "$security_only" = true ] || [ "$run_all" = true ]; then
|
||||
check_security || test_passed=false
|
||||
fi
|
||||
|
||||
if [ "$performance_only" = true ] || [ "$run_all" = true ]; then
|
||||
run_performance_tests || test_passed=false
|
||||
fi
|
||||
|
||||
if [ "$compatibility_only" = true ] || [ "$run_all" = true ]; then
|
||||
run_compatibility_tests || test_passed=false
|
||||
fi
|
||||
|
||||
# 检查包大小
|
||||
if [ "$run_all" = true ]; then
|
||||
check_bundle_size || test_passed=false
|
||||
fi
|
||||
|
||||
# 生成测试报告
|
||||
if [ "$run_all" = true ]; then
|
||||
generate_test_report
|
||||
fi
|
||||
|
||||
# 清理测试文件
|
||||
cleanup_test_files
|
||||
|
||||
# 输出测试结果
|
||||
if [ "$test_passed" = true ]; then
|
||||
log_success "所有测试通过!"
|
||||
exit 0
|
||||
else
|
||||
log_error "部分测试失败!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 错误处理
|
||||
error_handler() {
|
||||
local line_number=$1
|
||||
log_error "脚本在第 $line_number 行出错"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 设置错误处理
|
||||
trap 'error_handler $LINENO' ERR
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user