Zaktualizuj Prismę do wersji v7 w aplikacji Next.js z adapterami drivera
ESM, aktualizacje schematów/generatorów, dotenv, moduły konfiguracyjne oraz tworzenie instancji klienta za pomocą adapterów sterowników.
Prisma v7 wprowadza domyślne ustawienia modułów ES, nową metodę tworzenia instancji klienta oraz adaptery sterowników. Aktualizacja aplikacji Next.js polega na realizacji sekwencji zadań, a nie tylko na podniesieniu wersji.
Wymagania minimalne
Node.js 20.19+ (zalecany 22.x), TypeScript 5.4+ oraz wersja Next.js kompatybilna z ustawieniami ESM.
Kroki aktualizacji
1. Zaktualizuj zależności
Podnieś wersje prisma i @prisma/client do v7 jednocześnie.
2. Włącz obsługę modułów ES
Ustaw "type": "module" tam, gdzie to konieczne, oraz popraw rozszerzenia/drogi importu, które wcześniej były tolerowane przez CJS.
3. Zaktualizuj schemat Prisma
Zastosuj zmiany w generatorze/dostawcy opisane dla wersji v7; ponownie wygeneruj plik po edycjach.
4. Zainstaluj dotenv, jeśli jest to konieczne
Zainstaluj środowisko wyraźnie, gdy nowe punkty wejścia nie ładują już pliku .env w stary sposób.
5. Stworzenie pliku konfiguracyjnego Prisma
Zcentralizuj adresy źródeł danych oraz ustawienia adapterów w obsługiwanym module konfiguracyjnym.
6. Aktualizacja instancji klienta z adapterami sterowników
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
Podłącz adapter odpowiedni dla twojego sterownika bazy danych zamiast polegać na przestarzałych konstruktoraх.
8. Ponowne utworzenie klienta Prisma
Wykonaj polecenie prisma generate po ustaleniu schematu/konfiguracji.
9. Testowanie migracji
Zrób migracje na tymczasowej bazie danych, sprawdź kluczowe obsługi tras w Next.js i upewnij się, że importy w czasie wykonywania na brzegu/servera działają poprawnie.
Częste problemy
- Mieszane importy CJS/ESM w pliku
lib/prisma.ts - Niewłaściwy silnik Node w środowisku CI
- Zaniedbanie ponownego utworzenia klienta po zmianach w adapterze
- Środowisko Edge runtime importujące tylko sterowniki Node
Zintegruj zmiany w adapterze oraz ESM w jednym PR, dodając test sprawdzający działanie ścieżek create/read/update.
Utrzymuj jeden instancję klienta Prisma dla środowisk serwerowych, aby uniknąć wyczerpania pul połączeń w funkcji HMR podczas rozwoju w Next.js.
Zdokumentuj, które ścieżki działają w środowisku Edge, a które w Node; adaptery się różnią, a ciche rozwiązania awaryjne powodują niestabilne błędy tylko w produkcji.
Utrzymuj jeden instancję klienta Prisma dla środowisk serwerowych, aby uniknąć wyczerpania pul połączeń w funkcji HMR podczas rozwoju w Next.js.
Po ponownym utworzeniu klienta usuń przestarzałe cache budowania .next, aby Next.js nie importował starej wersji klienta Prisma z poprzedniego kompilowania.
Zaufaj ustawieniom zarządzania zasobami połączeń podczas zmiany adapterów — serwery typu serverless oraz długotrwałe serwery Node wymagają różnych rozmiarów puli połączeń.
Literatura pokrewna
- Next.js, Tailwind i Prisma z Docker Postgres — Krok po kroku: utworzenie aplikacji Next.js w TypeScript, uruchomienie Postgresa w Dockerze, konfiguracja Prisma migrate i seed oraz wyszukiwanie użytkowników z komponentu serwerowego.
- Prisma 7 z NestJS i adaptatorami drivera MySQL — Konfiguracja klienta Prisma 7 w TypeScript, pliku prisma.config.ts oraz adaptatora MariaDB w module globalnym NestJS.