flnxi-Wu/scripts/tools/fix-prisma.sh
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

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 ""