Апгрэйдуйце 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
Централізаваць адресы джэранасоў дадзеных і налаштаванні адаптараў у падтрымваным модулі налашоўкаў.
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 імпортуе толькі драйверы для Node
Уключыце змяны адаптараў і ESM у аднам PR з тэстам на шляхах create/read/update.
Застаўце адны сінглтон кліента Prisma для серверных сред працы, каб ухиліцца ад выкарання пулоў з’яносоў у режыме HMR развіцця Next.js.
Дакументаваць, якія маршруты працуюць у Edge і якія — у Node; адаптары разныя, і бесшумныя запасные варыянты вызываюць нестабільныя проблемы толькі у продакшэне.
Застаўце адны сінглтон кліента Prisma для серверных сред працы, каб ухиліцца ад выкарання пулоў з’яносоў у режыме HMR развіцця Next.js.
Пасля павторэгенеравання кліента адмахніце застарэлыя кешы будовы .next, каб Next.js не імпортаваў старую версію кліента Prisma з пакананнага компілявання.
Пераканаўце настройкі пулінацыі з’яносоў пад час змены адаптараў — серверы без службовыка та дугачасныя Node-серверы выклікаюць патрэбу ў разных розмерах пулаў.