Галоўная / Артыкулы / Апгрэйдуйце Prisma да версіі v7 у прыкладнай програме Next.js з адаптарамі драйвераў

Апгрэйдуйце Prisma да версіі v7 у прыкладнай програме Next.js з адаптарамі драйвераў

ESM, апдэты схем/генератораў, dotenv, модулі налаштавання і стварэнне кліента через адаптары драйвераў.

636 слоў

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-серверы выклікаюць патрэбу ў разных розмерах пулаў.