Migración desde Next.js

Por: Artiko
vinextnextjsmigracioncompatibilidad

Proceso de migración

Vinext ofrece herramientas automatizadas para migrar proyectos Next.js existentes.

Paso 1: Evaluar compatibilidad

npx vinext check

Este comando analiza tu proyecto en 4 etapas:

  1. Imports — Escanea todos los imports next/* y evalúa soporte
  2. Configuración — Revisa next.config.* por opciones reconocidas
  3. Dependencias — Verifica librerías contra un mapa de compatibilidad
  4. Estructura — Examina convenciones de archivos

El resultado es un score de compatibilidad en porcentaje. Un score alto (>80%) indica migración sencilla.

Paso 2: Ejecutar migración

npx vinext init

El comando vinext init realiza 7 pasos automáticamente:

  1. Ejecuta vinext check
  2. Instala dependencias (vinext, vite, @vitejs/plugin-rsc para App Router)
  3. Actualiza React si es necesario (requiere >= 19.2.0)
  4. Agrega "type": "module" al package.json
  5. Renombra configs CJS a .cjs (ej: postcss.config.jspostcss.config.cjs)
  6. Agrega scripts dev:vinext y build:vinext
  7. Genera un vite.config.ts mínimo

La migración es no destructiva: tu setup de Next.js sigue funcionando. Puedes ejecutar ambos en paralelo.

Paso 3: Probar

npm run dev:vinext

Opciones de init

npx vinext init --port 3001       # Puerto del dev server (default: 3001)
npx vinext init --skip-check      # Saltar evaluación
npx vinext init --force           # Forzar sin confirmación

Lo que funciona directamente

Estructura de proyecto

Módulos reimplementados (33+)

MóduloSoporte
next/linkCompleto
next/imageCompleto (via @unpic/react)
next/navigationCompleto
next/serverCompleto
next/headersCompleto
next/cacheCompleto
next/dynamicCompleto
next/scriptCompleto
next/font/googleCDN runtime (sin subsetting)
next/font/local@font-face runtime
next/formCompleto
next/headCompleto (Pages Router)
next/routerCompleto (Pages Router)
next/ogParcial (sin módulos nativos en dev)

Variables de entorno

Compatibilidad de librerías

Funcionan sin cambios

Requieren trabajo adicional

LibreríaEstadoAlternativa
next-intlNo soportadoDepende de build plugins internos de Next.js
next-authNo soportadoMigrar a better-auth
@vercel/ogSolo producciónMódulos nativos no disponibles en dev

Limitaciones conocidas

Imágenes

Fonts

Módulos nativos

Módulos como sharp, satori, resvg y @napi-rs/canvas:

Otras limitaciones

FeatureLimitación
useSelectedLayoutSegmentDeriva segmentos del pathname (puede diferir en parallel routes)
runtime configIgnorado (siempre ejecuta en edge)
preferredRegionIgnorado
Turbopack/webpack configNo aplica (usar plugins de Vite)
next/jestNo soportado (usar Vitest)

Exclusiones intencionales

Vinext no implementa ni planea implementar:

Troubleshooting

”Module not found: next/…”

Verifica que vinext está instalado. El módulo next/* es resuelto internamente por Vinext a sus shims.

Error con módulos nativos en dev

Si ves errores con sharp, satori o similares en desarrollo:

React version mismatch

Vinext requiere React >= 19.2.0 para Server Components:

npm install react@latest react-dom@latest

“type”: “module” conflicts

Si vinext init agrega "type": "module" y rompe scripts existentes:

Build lento o falla

Rendimiento comparativo

MétricaNext.js 16Vinext (Vite 7)Vinext (Vite 8)
Build (33 rutas)7.38s4.64s1.67s
Bundle cliente (gzip)168.9 KB74.0 KB72.9 KB
Speedup build1x1.6x4.4x
Reducción bundle-56%-57%

Resumen del tutorial

A lo largo de estos 10 capítulos cubrimos:

  1. Qué es Vinext y por qué existe
  2. Instalación y estructura de proyecto
  3. Pages Router con data fetching
  4. App Router con layouts y streaming
  5. SSR y React Server Components
  6. Server Actions y formularios
  7. Navegación, imágenes y SEO
  8. Middleware y API routes
  9. Despliegue en Cloudflare Workers
  10. Migración desde Next.js

Vinext ofrece una alternativa viable para ejecutar aplicaciones Next.js fuera de Vercel, con mejor rendimiento de build y bundles más pequeños. Aunque es experimental, cubre el 94% de la API de Next.js 16 y está respaldado por Cloudflare.

Para más información, consulta el repositorio oficial de Vinext.