Edge Runtime
Next.js tiene dos entornos de ejecución (runtimes) de servidor que puedes usar en tu aplicación:
- Node.js Runtime (predeterminado), que tiene acceso a todas las APIs de Node.js y se usa para renderizar tu aplicación.
- Edge Runtime, que contiene un conjunto más limitado de APIs, usado en Middleware.
Consideraciones
- Edge Runtime no soporta todas las APIs de Node.js. Algunos paquetes pueden no funcionar como se espera.
- Edge Runtime no soporta Regeneración Estática Incremental (ISR).
- Ambos entornos de ejecución pueden soportar streaming dependiendo de tu adaptador de despliegue.
Referencia
Edge Runtime soporta las siguientes APIs:
APIs de Red
API | Descripción |
---|---|
Blob | Representa un blob |
fetch | Obtiene un recurso |
FetchEvent | Representa un evento de fetch |
File | Representa un archivo |
FormData | Representa datos de formulario |
Headers | Representa cabeceras HTTP |
Request | Representa una petición HTTP |
Response | Representa una respuesta HTTP |
URLSearchParams | Representa parámetros de URL |
WebSocket | Representa una conexión websocket |
APIs de Codificación
API | Descripción |
---|---|
atob | Decodifica una cadena en base-64 |
btoa | Codifica una cadena en base-64 |
TextDecoder | Decodifica un Uint8Array en una cadena |
TextDecoderStream | Decodificador encadenable para streams |
TextEncoder | Codifica una cadena en un Uint8Array |
TextEncoderStream | Codificador encadenable para streams |
APIs de Streams
API | Descripción |
---|---|
ReadableStream | Representa un stream legible |
ReadableStreamBYOBReader | Representa un lector de ReadableStream |
ReadableStreamDefaultReader | Representa un lector de ReadableStream |
TransformStream | Representa un stream de transformación |
WritableStream | Representa un stream escribible |
WritableStreamDefaultWriter | Representa un escritor de WritableStream |
APIs de Criptografía
API | Descripción |
---|---|
crypto | Proporciona acceso a funcionalidad criptográfica de la plataforma |
CryptoKey | Representa una clave criptográfica |
SubtleCrypto | Proporciona acceso a primitivas criptográficas comunes como hashing, firma, encriptación o desencriptación |
APIs Estándar Web
API | Descripción |
---|---|
AbortController | Permite abortar una o más solicitudes DOM cuando se desee |
Array | Representa un arreglo de valores |
ArrayBuffer | Representa un búfer genérico de datos binarios en crudo de longitud fija |
Atomics | Proporciona operaciones atómicas como métodos estáticos |
BigInt | Representa un número entero con precisión arbitraria |
BigInt64Array | Representa un arreglo tipado de enteros con signo de 64 bits |
BigUint64Array | Representa un arreglo tipado de enteros sin signo de 64 bits |
Boolean | Representa una entidad lógica y puede tener dos valores: true y false |
clearInterval | Cancela una acción repetitiva programada previamente mediante una llamada a setInterval() |
clearTimeout | Cancela una acción programada previamente mediante una llamada a setTimeout() |
console | Proporciona acceso a la consola de depuración del navegador |
DataView | Representa una vista genérica de un ArrayBuffer |
Date | Representa un momento específico en el tiempo en un formato independiente de la plataforma |
decodeURI | Decodifica un Identificador Uniforme de Recursos (URI) previamente creado por encodeURI o por una rutina similar |
decodeURIComponent | Decodifica un componente de URI previamente creado por encodeURIComponent o por una rutina similar |
DOMException | Representa un error que ocurre en el DOM |
encodeURI | Codifica un URI reemplazando cada instancia de ciertos caracteres por secuencias de escape que representan la codificación UTF-8 del carácter |
encodeURIComponent | Codifica un componente de URI reemplazando cada instancia de ciertos caracteres por secuencias de escape que representan la codificación UTF-8 del carácter |
Error | Representa un error al intentar ejecutar una sentencia o acceder a una propiedad |
EvalError | Representa un error relacionado con la función global eval() |
Float32Array | Representa un arreglo tipado de números de punto flotante de 32 bits |
Float64Array | Representa un arreglo tipado de números de punto flotante de 64 bits |
Function | Representa una función |
Infinity | Representa el valor matemático de Infinito |
Int8Array | Representa un arreglo tipado de enteros con signo de 8 bits |
Int16Array | Representa un arreglo tipado de enteros con signo de 16 bits |
Int32Array | Representa un arreglo tipado de enteros con signo de 32 bits |
Intl | Proporciona acceso a funcionalidades de internacionalización y localización |
isFinite | Determina si un valor es un número finito |
isNaN | Determina si un valor es NaN o no |
JSON | Proporciona funcionalidad para convertir valores JavaScript a y desde el formato JSON |
Map | Representa una colección de valores, donde cada valor puede aparecer solo una vez |
Math | Proporciona acceso a funciones y constantes matemáticas |
Number | Representa un valor numérico |
Object | Representa el objeto que es la base de todos los objetos JavaScript |
parseFloat | Analiza un argumento de cadena y devuelve un número de punto flotante |
parseInt | Analiza un argumento de cadena y devuelve un entero de la base especificada |
Promise | Representa la eventual finalización (o fallo) de una operación asíncrona y su valor resultante |
Proxy | Representa un objeto que se utiliza para definir comportamiento personalizado para operaciones fundamentales (ej. búsqueda de propiedades, asignación, enumeración, invocación de funciones, etc) |
queueMicrotask | Encola una microtarea para ser ejecutada |
RangeError | Representa un error cuando un valor no está en el conjunto o rango de valores permitidos |
ReferenceError | Representa un error cuando se referencia una variable inexistente |
Reflect | Proporciona métodos para operaciones JavaScript interceptables |
RegExp | Representa una expresión regular, permitiendo coincidir combinaciones de caracteres |
Set | Representa una colección de valores, donde cada valor puede aparecer solo una vez |
setInterval | Llama repetidamente a una función, con un retraso de tiempo fijo entre cada llamada |
setTimeout | Llama a una función o evalúa una expresión después de un número especificado de milisegundos |
SharedArrayBuffer | Representa un búfer genérico de datos binarios en crudo de longitud fija |
String | Representa una secuencia de caracteres |
structuredClone | Crea una copia profunda de un valor |
Symbol | Representa un tipo de dato único e inmutable que se utiliza como clave de una propiedad de objeto |
SyntaxError | Representa un error al intentar interpretar código sintácticamente inválido |
TypeError | Representa un error cuando un valor no es del tipo esperado |
Uint8Array | Representa un arreglo tipado de enteros sin signo de 8 bits |
Uint8ClampedArray | Representa un arreglo tipado de enteros sin signo de 8 bits limitados a 0-255 |
Uint32Array | Representa un arreglo tipado de enteros sin signo de 32 bits |
URIError | Representa un error cuando se usa una función global de manejo de URI de manera incorrecta |
URL | Representa un objeto que proporciona métodos estáticos para crear URLs de objetos |
URLPattern | Representa un patrón de URL |
URLSearchParams | Representa una colección de pares clave/valor |
WeakMap | Representa una colección de pares clave/valor en la que las claves tienen referencias débiles |
WeakSet | Representa una colección de objetos en la que cada objeto puede aparecer solo una vez |
WebAssembly | Proporciona acceso a WebAssembly |
Polyfills específicos de Next.js
Variables de entorno
Puede utilizar process.env
para acceder a las Variables de entorno tanto en next dev
como en next build
.
APIs no soportadas
El Runtime de Edge tiene algunas restricciones, incluyendo:
- Las APIs nativas de Node.js no están soportadas. Por ejemplo, no puede leer ni escribir en el sistema de archivos.
- Se pueden usar
node_modules
, siempre que implementen Módulos ES y no utilicen APIs nativas de Node.js. - Llamar a
require
directamente no está permitido. Utilice Módulos ES en su lugar.
Las siguientes características del lenguaje JavaScript están deshabilitadas y no funcionarán:
API | Descripción |
---|---|
eval | Evalúa código JavaScript representado como una cadena |
new Function(evalString) | Crea una nueva función con el código proporcionado como argumento |
WebAssembly.compile | Compila un módulo WebAssembly desde un origen de buffer |
WebAssembly.instantiate | Compila e instancia un módulo WebAssembly desde un origen de buffer |
En casos raros, su código podría contener (o importar) algunas sentencias de evaluación de código dinámico que no se pueden alcanzar en tiempo de ejecución y que no pueden ser eliminadas por treeshaking. Puede relajar la verificación para permitir archivos específicos con la configuración de su Middleware:
unstable_allowDynamic
es un glob, o un array de globs, que ignora la evaluación de código dinámico para archivos específicos. Los globs son relativos a la carpeta raíz de su aplicación.
Tenga en cuenta que si estas sentencias se ejecutan en el Edge, lanzarán un error y causarán un fallo en tiempo de ejecución.