Оновіть Prisma до версії v7 у додатку Next.js з адаптерами драйверів
ESM, оновлення схем/генераторів, dotenv, модулі конфігурації та створення клієнта через адаптери драйверів.
Prisma v7 впроваджує стандартні параметри ES module, новий спосіб інстанціювання клієнта та адаптери драйверів. Оновлення аплікації Next.js — це послідовний перелік кроків, а не просто підвищення версії.
Мінімальні вимоги
Node.js 20.19+ (рекомендується 22.x), TypeScript 5.4+ та версія Next.js, сумісна з вашими налаштуваннями ESM.
Кроки оновлення
1. Оновіть залежності
Одночасно підвищіть версії prisma та @prisma/client до v7.
2. Увімкніть підтримку ES module
Встановіть значення "type": "module" там, де це необхідно, та виправте розширення/шляхи імпорту, які раніше допускалися у форматі CJS.
3. Оновіть схему Prisma
Застосуйте зміни до генератора/провайдера, описані для v7; згенеруйте схему знову після внесених змін.
4. Якщо потрібно, встановіть dotenv
Явно завантажуйте середовище, коли нові точки входу більше не автоматично завантажують .env у старий спосіб.
5. Створення файлу конфігурації Prisma
Централізуйте URL-адреси джерел даних та налаштування адаптерів у підтримуваному модулі конфігурації.
6. Оновлення інстанціювання клієнта з використанням адаптерів драйвера
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
Під’єднайте адаптер для вашого драйвера бази даних замість того, щоб покладатися на застарілі конструктори.
8. Перегенерація клієнта Prisma
Виконайте prisma generate після того, як схема/конфігурація буде готова.
9. Тестування міграцій
Запустіть міграції на тимчасовій базі даних, перевірте критичні обробники маршрутів Next.js та підтвердьте, що імпорти в час виконання на краю мережі/сервері працюють коректно.
Поширені проблеми
- Змішані імпорти CJS/ESM у файлі
lib/prisma.ts - Неправильний двигун Node у середовищі CI
- Забування про перегенерацію клієнта після змін адаптера
- Середовище Edge runtime імпортує драйвери, призначені лише для Node
Об’єднайте зміни адаптера та ESM у один PR із тестом на шляхах create/read/update.
Використовуйте єдиний синглтон клієнта Prisma для серверних середовищ, щоб уникнути виснаження пулів з’єднань у режимі HMR у Next.js.
Описайте, які маршрути працюють у середовищі Edge та Node; адаптери відрізняються, і безпроблемні фолбеки спричиняють непостійні помилки лише у продакшені.
Використовуйте єдиний синглтон клієнта Prisma для серверних середовищ, щоб уникнути виснаження пулів з’єднань у режимі HMR у Next.js.
Після перегенерації клієнта видаліть застарілі кеші збірки .next, щоб Next.js не імпортував стару версію клієнта Prisma з попередньої компіляції.
Перевіряйте налаштування пулів з’єднань під час зміни адаптерів — сервери без обслуговування та довготривалі Node-сервери потребують різних розмірів пулів.