#!/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 "$@"