Startseite / Artikel / Prisma auf Version v7 in einer Next.js-Anwendung mit Treiberadaptern aktualisieren

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.

636 Wörter

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.