如何通过编程方式检查TypeScript Prisma客户端与schema.prisma文件同步?
检查Prisma客户端与schema.prisma是否同步的实用方案
方法1:启动前自动校验并生成
直接把项目的启动脚本改成这样,每次启动前都会自动校验schema有效性并重新生成客户端,从根源杜绝不同步问题:
"scripts": { "prestart": "prisma validate && prisma generate", "start": "node index.js" }
prisma validate会先检查schema的语法和逻辑是否正确,紧接着prisma generate确保客户端是基于最新schema生成的。
方法2:编程式哈希对比校验
Prisma生成客户端时,会把schema的哈希值内置在客户端代码里。你可以写一段简单的代码,在应用启动前对比当前schema文件和客户端的哈希值:
const fs = require('fs'); const crypto = require('crypto'); const { PrismaClient } = require('@prisma/client'); function checkPrismaSync() { // 读取本地schema文件内容 const schemaContent = fs.readFileSync('./prisma/schema.prisma', 'utf8'); // 计算schema的SHA256哈希 const schemaHash = crypto.createHash('sha256').update(schemaContent).digest('hex'); // 获取Prisma客户端内置的schema哈希 const clientHash = new PrismaClient()._schemaHash; if (schemaHash !== clientHash) { console.error('❌ Prisma客户端没跟上schema的变更!赶紧执行`prisma generate`命令'); process.exit(1); // 直接终止进程,避免启动异常应用 } else { console.log('✅ Prisma客户端与schema同步正常'); } } // 把校验放在应用最开头执行 checkPrismaSync();
把这段代码放在应用入口文件的最顶部,启动时自动校验,一旦不同步就立刻提示并终止。
方法3:Git钩子自动生成
给项目加个Git钩子,拉取代码或切换分支后自动生成客户端:
- 在项目的
.git/hooks目录下创建post-checkout文件(无后缀),内容如下:
#!/bin/sh # 检查schema.prisma是否有变更 if git diff --name-only HEAD~1 HEAD | grep -q "prisma/schema.prisma"; then echo "检测到schema.prisma有变更,自动生成Prisma客户端..." npx prisma generate fi
- 给文件添加执行权限:
chmod +x .git/hooks/post-checkout
之后每次拉取代码、切换分支,只要schema文件有变动,就会自动帮你生成客户端,完全不用手动惦记。
内容的提问来源于stack exchange,提问作者Capaj
相关产品推荐
相关产品推荐

