#!/bin/bash # Prisma 客户端修复脚本 echo "==========================================" echo " Prisma 客户端修复工具" echo "==========================================" echo "" # 检查是否在项目目录 if [ ! -f "package.json" ]; then echo "❌ 错误: 未找到 package.json" echo "请在项目根目录运行此脚本" exit 1 fi # 检查 schema.prisma if [ ! -f "prisma/schema.prisma" ]; then echo "❌ 错误: 未找到 prisma/schema.prisma" exit 1 fi echo "[1/7] 检查 Node.js 版本..." NODE_VERSION=$(node -v) NODE_MAJOR=$(echo $NODE_VERSION | cut -d'.' -f1 | sed 's/v//') echo "Node.js: $NODE_VERSION" if [ "$NODE_MAJOR" -lt 18 ]; then echo "⚠️ 警告: Node.js 版本太低 (当前: v$NODE_MAJOR, 推荐: ≥18)" echo "建议先升级 Node.js" fi echo "" echo "[2/7] 检查 Prisma Schema..." if [ -f "prisma/schema.prisma" ]; then echo "✅ Schema 文件存在" # 显示数据库配置 echo "" echo "数据库配置:" grep -A 3 "datasource db" prisma/schema.prisma | sed 's/^/ /' # 显示生成器配置 echo "" echo "生成器配置:" grep -A 3 "generator client" prisma/schema.prisma | sed 's/^/ /' else echo "❌ Schema 文件不存在" exit 1 fi echo "" echo "[3/7] 清理旧的 Prisma 生成文件..." rm -rf node_modules/.prisma rm -rf node_modules/@prisma echo "✅ 清理完成" echo "" echo "[4/7] 检查环境变量..." if [ -f ".env" ]; then echo "✅ .env 文件存在" # 检查 DATABASE_URL if grep -q "DATABASE_URL" .env; then echo "✅ DATABASE_URL 已配置" # 隐藏密码显示 grep "DATABASE_URL" .env | sed 's/:[^:]*@/:***@/' | sed 's/^/ /' else echo "⚠️ 警告: DATABASE_URL 未配置" fi else echo "⚠️ 警告: .env 文件不存在" fi echo "" echo "[5/7] 重新安装 Prisma 依赖..." echo "⏳ 这可能需要一些时间..." npm install @prisma/client prisma --save if [ $? -eq 0 ]; then echo "✅ Prisma 依赖安装成功" else echo "❌ Prisma 依赖安装失败" exit 1 fi echo "" echo "[6/7] 生成 Prisma 客户端..." echo "⏳ 正在生成..." npx prisma generate if [ $? -eq 0 ]; then echo "✅ Prisma 客户端生成成功" else echo "❌ Prisma 客户端生成失败" echo "" echo "请检查:" echo "1. 数据库连接是否正常" echo "2. schema.prisma 语法是否正确" echo "3. 环境变量是否配置正确" exit 1 fi echo "" echo "[7/7] 验证生成结果..." # 检查生成的文件 if [ -d "node_modules/.prisma/client" ]; then echo "✅ Prisma 客户端目录存在" # 检查关键文件 if [ -f "node_modules/.prisma/client/index.js" ]; then echo "✅ index.js 存在" fi if [ -f "node_modules/.prisma/client/index.d.ts" ]; then echo "✅ 类型定义存在" fi # 显示生成的模型 echo "" echo "生成的模型:" grep "export type" node_modules/.prisma/client/index.d.ts | head -10 | sed 's/^/ /' else echo "❌ Prisma 客户端目录不存在" exit 1 fi echo "" echo "==========================================" echo " ✅ 修复完成!" echo "==========================================" echo "" echo "📊 生成的文件:" echo " node_modules/.prisma/client/" du -sh node_modules/.prisma/client/ 2>/dev/null | awk '{print " 大小: " $1}' echo "" echo "🎯 下一步:" echo " npm run dev # 启动开发服务器" echo " npm run build # 构建项目" echo " npx prisma studio # 打开数据库管理界面" echo "" # 可选:测试数据库连接 read -p "是否测试数据库连接?(y/n): " TEST_DB if [ "$TEST_DB" = "y" ] || [ "$TEST_DB" = "Y" ]; then echo "" echo "测试数据库连接..." npx prisma db pull --force 2>&1 | head -10 fi echo ""