Inicio / Artículos / Actualizar Prisma a la versión v7 en una aplicación Next.js con adaptadores de controlador

Actualizar Prisma a la versión v7 en una aplicación Next.js con adaptadores de controlador

ESM, actualizaciones de esquemas/generadores, dotenv, módulos de configuración e instanciación del cliente a través de adaptadores de controlador.

636 palabras

Prisma v7 introduce los valores predeterminados para módulos ES, una nueva forma de instanciar el cliente y adaptadores de controlador. Actualizar una aplicación Next.js implica seguir una lista de verificación secuenciada en lugar de simplemente elevar la versión.

Requisitos mínimos

Node.js 20.19+ (se recomienda 22.x), TypeScript 5.4+, y una versión de Next.js compatible con la configuración ESM del proyecto.

Pasos para actualizar

1. Actualizar las dependencias

Eleva simultáneamente a v7 los paquetes prisma y @prisma/client.

2. Habilitar el soporte para módulos ES

Establece "type": "module" donde sea necesario y corrige las extensiones/rutas de importación que anteriormente eran toleradas por CJS.

3. Actualizar el esquema de Prisma

Aplica los cambios en el generador/proveedor documentados para v7; regenera el esquema después de realizar las modificaciones.

4. Instalar dotenv si es necesario

Cargue el entorno de forma explícita cuando los nuevos puntos de entrada ya no carguen automáticamente .env de la manera anterior.

5. Crear el archivo de configuración de Prisma

Centralice las URLs de fuentes de datos y la configuración de los adaptadores en el módulo de configuración soportado.

6. Actualizar la instancia del cliente con adaptadores de controlador

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

Conecte el adaptador correspondiente a su controlador de base de datos en lugar de depender de constructores obsoletos.

8. Regenerar el cliente de Prisma

Ejecute prisma generate una vez que el esquema y la configuración estén listos.

9. Probar su migración

Ejecute las migraciones en una base de datos temporal, pruebe los controladores de rutas de Next.js críticos y confirme que las importaciones en tiempo de ejecución se resuelvan correctamente.

Problemas comunes

  • Importaciones mixtas de CJS/ESM en lib/prisma.ts
  • Motor Node incorrecto en CI
  • Olvidar regenerar el cliente después de cambios en los adaptadores
  • Rendimiento de Edge que importa controladores solo para Node

Incluya los cambios en el adaptador y en ESM en una sola PR con una prueba de funcionamiento en las rutas create/read/update.

Mantenga un único singleton de cliente Prisma para los entornos de servidor para evitar agotar los pools de conexiones en el HMR de desarrollo de Next.js.

Documente qué rutas se ejecutan en Edge y cuáles en Node; los adaptadores difieren y las soluciones de fallback silenciosas causan fallos impredecibles solo en producción.

Mantenga un único singleton de cliente Prisma para los entornos de servidor para evitar agotar los pools de conexiones en el HMR de desarrollo de Next.js.

Después de regenerar el cliente, elimine los cachés obsoletos de compilación .next para que Next.js no importe una versión antigua del cliente Prisma de una compilación anterior.

Verifique la configuración de agrupamiento de conexiones al cambiar adaptadores: los servidores serverless y los servidores Node de ejecución prolongada requieren tamaños de grupo diferentes.

Lecturas relacionadas