Files
xlxumu/scripts/init.sh

465 lines
11 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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