158 lines
3.8 KiB
Bash
158 lines
3.8 KiB
Bash
#!/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 ""
|
|
|
|
|
|
|