Обновите Prisma до версии v7 в приложении Next.js с адаптерами драйверов
ESM, обновления схем/генераторов, dotenv, модули конфигурации и создание экземпляров клиента с помощью адаптеров-драйверов.
Prisma v7 вводит стандарты ES-модулей, новый способ инстанцирования клиента и адаптеры драйверов. Обновление приложения Next.js представляет собой последовательный список действий, а не просто повышение версии.
Минимальные требования
Node.js 20.19+ (рекомендуется 22.x), TypeScript 5.4+, а также версия Next.js, совместимая с настройками ESM.
Шаги обновления
1. Обновите зависимости
Одновременно повысьте версии prisma и @prisma/client до v7.
2. Включите поддержку ES-модулей
Укажите "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 с тестом на корректность операций создания/чтения/обновления.
Используйте единственный экземпляр клиента Prisma для серверных сред, чтобы избежать исчерпания пулов соединений в режиме разработки Next.js с HMR.
Опишите, какие маршруты работают в среде Edge и Node; адаптеры различаются, и бесшумные фолбэки приводят к непостоянным сбоям только в продакшене.
Используйте единственный экземпляр клиента Prisma для серверных сред, чтобы избежать исчерпания пулов соединений в режиме разработки Next.js с HMR.
После регенерации клиента удаляйте устаревшие кэши сборки .next, чтобы Next.js не импортировал старую версию клиента Prisma с предыдущей компиляции.
Проверьте настройки пула подключений при смене адаптеров — серверless-решения и долгоживущие Node-серверы требуют разных размеров пула.