Strona główna / Artykuły / Zaktualizuj Prismę do wersji v7 w aplikacji Next.js z adapterami drivera

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.

636 słó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