465 lines
11 KiB
Bash
465 lines
11 KiB
Bash
|
|
#!/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 "$@"
|