Prisma auf Version v7 in einer Next.js-Anwendung mit Treiberadaptern aktualisieren
ESM, Aktualisierungen von Schemata/Generatoren, dotenv, Konfigurationsmodule sowie Instanziierung des Clients über Treiberadapter.
Prisma v7 bringt Standardeinstellungen für ES-Module, eine neue Client-Instanziierung sowie Driver-Adapter. Das Aufrüsten einer Next.js-Anwendung erfolgt durch eine sequenzielle Checkliste und nicht einfach durch einen Versionssprung.
Mindestanforderungen
Node.js 20.19+ (22.x empfohlen), TypeScript 5.4+ sowie eine Next.js-Version, die mit Ihren ESM-Einstellungen kompatibel ist.
Aufrüstungsschritte
1. Abhängigkeiten aktualisieren
Erhöhen Sie prisma und @prisma/client gemeinsam auf v7.
2. ES-Module-Unterstützung aktivieren
Setzen Sie an den erforderlichen Stellen "type": "module" ein und korrigieren Sie Import-Erweiterungen/Pfade, die zuvor von CJS toleriert wurden.
3. Prisma-Schema aktualisieren
wenden Sie die für v7 dokumentierten Änderungen am Generator/Provider an und erzeugen Sie das Schema nach den Änderungen neu.
4. Bei Bedarf dotenv installieren
Laden Sie die Umgebungsvariablen explizit, wenn die neuen Eingangspunkte .env nicht mehr auf die alte Weise automatisch laden.
5. Erstellen Sie eine Prisma-Konfigurationsdatei
Zentralisieren Sie die URLs der Datenquellen sowie die Einrichtung der Adapter im unterstützten Konfigurationsmodul.
6. Aktualisieren Sie die Client-Instanziierung mit Driver-Adaptern
npm install @prisma/client@7
npm install -D prisma@7
{
"type": "module",
"scripts": {...}
}
generator client {
provider = "prisma-client-js"
engineType = "binary"
output = "./generated"
}
generator client {
provider = "prisma-client"
}
npm install dotenv
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
seed: 'tsx prisma/seed.ts',
},
datasource: {
url: env('DATABASE_URL'),
},
})
npm install @prisma/adapter-pg
// db/index.ts
import { PrismaClient } from '@prisma/client';
const globalForPrisma = global as unknown as {
prisma: PrismaClient;
};
const prisma =
globalForPrisma.prisma ||
new PrismaClient();
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
export default prisma;
// db/index.ts
import { PrismaClient } from "@prisma/client";
import { Pool } from "pg";
import { PrismaPg } from "@prisma/adapter-pg";
// postgreSQL adapter for prisma 7
const pool = new Pool({
connectionString: process.env.DATABASE_URL!,
});
const adapter = new PrismaPg(pool);
const globalForPrisma = global as unknown as {
prisma: PrismaClient;
};
const prisma =
globalForPrisma.prisma ||
new PrismaClient({
adapter,
});
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
export default prisma;
// app/api/users/route.ts
import { prisma } from '@/lib/prisma';
import { NextResponse } from 'next/server';
export async function GET() {
try {
const users = await prisma.user.findMany();
return NextResponse.json(users);
} catch (error) {
return NextResponse.json(
{ error: 'Failed to fetch users' },
{ status: 500 }
);
}
}
npx prisma generate
npm run dev
rm -rf node_modules package-lock.json
npm install
npx prisma generate
Verschließen Sie den Adapter für Ihren Datenbank-Driver anstelle dessen, dass Sie auf veraltete Konstruktoren angewiesen sind.
8. Regenerieren Sie den Prisma Client
Führen Sie nach Abschluss der Skript-/Konfigurationsanpassung prisma generate aus.
9. Testen Sie Ihre Migration
Führen Sie Migrationsoperationen an einer temporären Datenbank durch, prüfen Sie die kritischen Next.js-Route-Handler und stellen Sie sicher, dass die Imports im Edge-/Server-Betrieb korrekt gelöst werden.
Häufige Probleme
- Mischte CJS/ESM-Importe in
lib/prisma.ts - Falscher Node-Engine in CI
- Vergessen, den Client nach Adapteränderungen neu zu generieren
- Edge-Runtime importiert nur Node-basierte Treiber
Führen Sie die Adapter- und ESM-Änderungen in einem einzigen PR durch, zusammen mit einem Smoke-Test für die create/read/update-Pfade.
Bewahren Sie für Server-Runtimes einen einzigen Prisma-Client-Singleton auf, um die Verbindungs-Pools in Next.js Dev HMR nicht zu erschöpfen.
Dokumentieren Sie, welche Routen auf Edge und welche auf Node laufen; Adapter unterscheiden sich, und stille Fallback-Lösungen verursachen unzuverlässige Fehler ausschließlich in der Produktion.
Bewahren Sie für Server-Runtimes einen einzigen Prisma-Client-Singleton auf, um die Verbindungs-Pools in Next.js Dev HMR nicht zu erschöpfen.
Nach der Neugenerierung des Clients löschen Sie veraltete .next-Build-Caches, damit Next.js nicht eine alte Prisma-Client-Version aus einer früheren Kompilierung importiert.
Überprüfen Sie die Einstellungen für das Connection Pooling beim Wechsel der Adapter – serverlose Umgebungen sowie langlaufende Node-Server benötigen unterschiedliche Poolgrößen.