PRNext 0.1.19: compilar en el primer uso, preservar el estado

Un editor utilizado en una página no debería agregar su trabajo de compilación a cada inicio. Un formulario en progreso no debería desaparecer porque llega una edición de código mientras se envía. PRNext 0.1.19-alpha aborda estas situaciones con una compilación diferida del cliente, actualizaciones de desarrollo más enfocadas y una mejor coordinación entre las acciones del servidor y la actualización rápida.

Esta versión también le brinda más contexto antes de una migración y un ejemplo completo para ejercitar una aplicación con cuentas, una base de datos y autenticación. Esto es lo que cambia en su proyecto, cómo habilitar las opciones útiles y dónde importan sus límites.

Mantenga el trabajo en progreso mediante una edición de código

Considere un panel con un filtro en su diseño y un formulario que llama a una acción del servidor. Guarda un componente mientras llega la respuesta del formulario. PRNext coordina esas operaciones para preservar el diseño montado cuando la actualización es compatible, en lugar de tratar las referencias de acciones actualizadas como una razón para iniciar la página nuevamente.

Las acciones cuyo origen no se modifica mantienen su identidad dentro de la sesión de desarrollo, incluidos los componentes de caché. Las acciones modificadas reciben nuevas identidades. Las construcciones de producción conservan identidades independientes. Una respuesta de vuelo antigua no puede sobrescribir una representación de una generación más nueva y un error de acción permanece observable incluso cuando la navegación reemplaza su representación.

La mutación y su visualización siguen siendo operaciones separadas. Una interacción más nueva puede hacer que una visualización anterior sea irrelevante, pero PRNext nunca vuelve a enviar la mutación. Las ediciones incompatibles, algunos cambios de configuración y una recarga completa del documento aún pueden restablecer el estado guardado en la memoria.

Compile una herramienta grande cuando la abra.

Una importación dinámica ordinaria produce un fragmento durante la compilación, incluso durante la descarga espera una interacción. En desarrollo, experimental.lazyDynamicImports va más allá: mantiene los objetivos de clientes elegibles fuera del gráfico inicial del navegador y espera su primer uso antes de transformarlos y compilarlos.

Habilite esta opción en una aplicación App Router utilizando el compilador nativo. Un editor, un visor o un panel que rara vez se abre es un lugar útil para comparar el comportamiento. La opción está deshabilitada de forma predeterminada.

prnext.config.mjs
export default {
  experimental: {
    lazyDynamicImports: true
  }
};

El primer uso paga el costo de compilar ese subgrafo. Los archivos se preparan en una etapa privada y se publican completos. Los estilos se cargan antes de que se resuelva la importación. Una vez activado, el módulo participa en JavaScript y actualizaciones de CSS. Las dependencias de ESM ya cargadas conservan su identidad y enlaces activos; dos importadores también comparten el mismo objeto JSON.

El beneficio previsto es sacar el trabajo del inicio cuando su flujo de trabajo no utiliza esa herramienta. Mida el inicio y el retraso del primer uso juntos. La opción no cambia ni los fragmentos de producción ni el comportamiento de renderizado del servidor.

Un ejemplo con un editor solo para navegador

Un componente siguiente/dinámico con ssr: false mantiene el editor en el navegador. En este ejemplo, el componente se solicita solo después de que se abre el panel. Con la compilación diferida habilitada, su código de cliente elegible espera hasta ese uso.

aplicación/editor-panel.jsx
'use client';

import { useState } from 'react';
import dynamic from 'next/dynamic';

const Editor = dynamic(() => import('./editor'), {
  ssr: false,
  loading: () => <p>Loading the editor…</p>
});

export default function EditorPanel() {
  const [open, setOpen] = useState(false);
  return open
    ? <Editor />
    : <button onClick={() => setOpen(true)}>Open the editor</button>;
}

El alcance inicial excluye los ganchos de paquetes web y los cargadores personalizados. ¿Importaciones calculadas, atributos de importación y rutas literales que contienen? o # mantener la compilación normal. Un sufijo introducido por un alias o dependencia dentro de un gráfico diferido produce un error explícito. Una dependencia CommonJS compartida cuya identidad no se puede conservar y una nueva acción del servidor descubierta solo a través de ese gráfico también requiere la ruta normal o una importación estática adecuada.

Los estilos activados permanecen cargados para la generación de desarrollo, incluso con rutas paralelas. Prefiere módulos CSS o selectores locales de la herramienta. El mecanismo requiere enlaces duros en el sistema de archivos de la generación; deshabilite la opción cuando ese entorno no pueda crearlos.

Editar una hoja de estilo sin copiar la compilación JavaScript

Una edición de CSS compatible reconstruye los paquetes afectados y publica una pequeña generación de estilo sobre la generación JavaScript actual. PRNext conserva los recursos que aún están en uso, incluidas imágenes, fuentes y mapas de origen, sin escanear ni copiar cada archivo JavaScript para esa actualización.

Si edita los estilos de un panel y luego edita otro panel varias veces, los recursos modificados del primer panel permanecen disponibles en el catálogo de estilos delimitado. Los recursos sin cambios permanecen accesibles en la generación base. La procedencia incompleta, un catálogo de gran tamaño o un cambio incompatible recurre a una compilación completa.

Los gráficos incrementales también dividen su presupuesto entre la compilación principal y los estilos. Los estilos pueden tomar prestada capacidad no utilizada sin desalojar continuamente los gráficos principales cuando un proyecto tiene muchos alcances CSS. Los límites siguen siendo globales y el trabajo se dispone al cerrar la sesión.

El macOS, una notificación de directorio puede combinar varios cambios. PRNext verifica los archivos en ese subárbol de origen para detectar una edición profunda, tanto en desarrollo como con compilación --watch. Si la verificación permanece incompleta, informa un error recuperable y mantiene la compilación anterior sin iniciar un ciclo de compilación.

Comprenda una incompatibilidad antes de cambiar los tiempos de ejecución

Una importación next/* admitida en su fuente puede ocultar una dependencia que utiliza un API privado diferente. La auditoría de migración sigue las importaciones estáticas accesibles en paquetes instalados. Tiene en cuenta los contextos del navegador, el nodo y el componente del servidor React e informa el archivo, la línea y la cadena de importación detrás de un diagnóstico.

Un límite de servidor de uso sigue siendo un límite de servidor cuando un componente de cliente lo alcanza a través de una reexportación. Una dependencia del navegador en un Nodo API se verifica con asignaciones de navegador e implementaciones instaladas, en lugar de aceptarse simplemente porque el paquete existe.

Desde un proyecto con la versión PRNext prevista ya instalada, comience con comprobaciones que no apliquen una migración:

Terminal
npx --no-install prnext migrate --dry-run
npx --no-install prnext migrate --check --json

El informe distingue el comportamiento inspeccionado del comportamiento desconocido. Una importación calculada, una salida del cargador o un límite transversal no se convierten en un éxito implícito. La auditoría no ejecuta los módulos de dependencia que inspecciona, pero la evaluación de la configuración puede ejecutar el código del proyecto. No es un entorno limitado para código que no es de confianza ni un certificado de compatibilidad. Una compilación real y los flujos de trabajo de su aplicación aún son necesarios.

Vaya más allá de una página de demostración a una aplicación con cuentas

El ejemplo de referencia de saas combina Better Auth, PostgreSQL, Drizzle y next-intl en una aplicación en francés e inglés. Cada cuenta posee sus notas. El panel verifica la sesión y cada mutación verifica nuevamente el usuario y la propiedad de los datos. Ocultar un botón o proteger sólo la página es insuficiente.

Los formularios de autenticación aplican presupuestos PostgreSQL atómicos y compartidos antes del costoso hash de contraseñas. Los flujos de trabajo de calificación ejercitan la revocación de sesión, el rechazo de CSRF y las devoluciones de llamadas de OpenID Connect no válidas, utilizando un proveedor local controlado y un proxy HTTPS que verifica las cookies seguras.

La misma aplicación se prueba después de reubicar su salida independiente, con dos trabajadores y la fuente original eliminada. Es un punto de partida verificable. Las reglas de acceso, recuperación de cuenta, verificación y límites de abuso aún deben coincidir con su producto. Durante la implementación, mantenga el backend privado detrás de un proxy confiable que sobrescriba los encabezados de reenvío.

Adopte la versión con los controles adecuados

Después de una actualización, verifique la versión real instalada y las dependencias React alineadas, luego reconstruya y reinicie la aplicación. Si está migrando desde Next.js, conserve el informe de auditoría y ejerza rutas, formularios, estilos y navegación autenticados. Compare una opción experimental en su propio proyecto antes de mantenerla habilitada.

PRNext sigue siendo un alfa con compatibilidad parcial con Next.js. La calificación funcional cubre Linux, macOS y Windows, así como Chromium, Firefox y WebKit. Estas comprobaciones no establecen una mejora general del rendimiento. Una campaña histórica sigue sin ser concluyente porque las observaciones del proceso están incompletas; no establece el rendimiento de esta versión. Las fallas anteriores de Windows EPERM durante la publicación del estado de desarrollo atómico permanecen documentadas, sin causa demostrada o solución específica.

Un flujo de trabajo representativo es un punto de partida útil: abra una ruta fría, edite sus estilos, envíe un formulario y regrese a una página visitada anteriormente. Esto verifica qué cambia la versión para su aplicación, con sus dependencias, autenticación y restricciones de implementación.

Fuentes y lecturas adicionales

volver al blog