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

APIDescripción
BlobRepresenta un blob
fetchObtiene un recurso
FetchEventRepresenta un evento de fetch
FileRepresenta un archivo
FormDataRepresenta datos de formulario
HeadersRepresenta cabeceras HTTP
RequestRepresenta una petición HTTP
ResponseRepresenta una respuesta HTTP
URLSearchParamsRepresenta parámetros de URL
WebSocketRepresenta una conexión websocket

APIs de Codificación

APIDescripción
atobDecodifica una cadena en base-64
btoaCodifica una cadena en base-64
TextDecoderDecodifica un Uint8Array en una cadena
TextDecoderStreamDecodificador encadenable para streams
TextEncoderCodifica una cadena en un Uint8Array
TextEncoderStreamCodificador encadenable para streams

APIs de Streams

APIDescripción
ReadableStreamRepresenta un stream legible
ReadableStreamBYOBReaderRepresenta un lector de ReadableStream
ReadableStreamDefaultReaderRepresenta un lector de ReadableStream
TransformStreamRepresenta un stream de transformación
WritableStreamRepresenta un stream escribible
WritableStreamDefaultWriterRepresenta un escritor de WritableStream

APIs de Criptografía

APIDescripción
cryptoProporciona acceso a funcionalidad criptográfica de la plataforma
CryptoKeyRepresenta una clave criptográfica
SubtleCryptoProporciona acceso a primitivas criptográficas comunes como hashing, firma, encriptación o desencriptación

APIs Estándar Web

APIDescripción
AbortControllerPermite abortar una o más solicitudes DOM cuando se desee
ArrayRepresenta un arreglo de valores
ArrayBufferRepresenta un búfer genérico de datos binarios en crudo de longitud fija
AtomicsProporciona operaciones atómicas como métodos estáticos
BigIntRepresenta un número entero con precisión arbitraria
BigInt64ArrayRepresenta un arreglo tipado de enteros con signo de 64 bits
BigUint64ArrayRepresenta un arreglo tipado de enteros sin signo de 64 bits
BooleanRepresenta una entidad lógica y puede tener dos valores: true y false
clearIntervalCancela una acción repetitiva programada previamente mediante una llamada a setInterval()
clearTimeoutCancela una acción programada previamente mediante una llamada a setTimeout()
consoleProporciona acceso a la consola de depuración del navegador
DataViewRepresenta una vista genérica de un ArrayBuffer
DateRepresenta un momento específico en el tiempo en un formato independiente de la plataforma
decodeURIDecodifica un Identificador Uniforme de Recursos (URI) previamente creado por encodeURI o por una rutina similar
decodeURIComponentDecodifica un componente de URI previamente creado por encodeURIComponent o por una rutina similar
DOMExceptionRepresenta un error que ocurre en el DOM
encodeURICodifica un URI reemplazando cada instancia de ciertos caracteres por secuencias de escape que representan la codificación UTF-8 del carácter
encodeURIComponentCodifica un componente de URI reemplazando cada instancia de ciertos caracteres por secuencias de escape que representan la codificación UTF-8 del carácter
ErrorRepresenta un error al intentar ejecutar una sentencia o acceder a una propiedad
EvalErrorRepresenta un error relacionado con la función global eval()
Float32ArrayRepresenta un arreglo tipado de números de punto flotante de 32 bits
Float64ArrayRepresenta un arreglo tipado de números de punto flotante de 64 bits
FunctionRepresenta una función
InfinityRepresenta el valor matemático de Infinito
Int8ArrayRepresenta un arreglo tipado de enteros con signo de 8 bits
Int16ArrayRepresenta un arreglo tipado de enteros con signo de 16 bits
Int32ArrayRepresenta un arreglo tipado de enteros con signo de 32 bits
IntlProporciona acceso a funcionalidades de internacionalización y localización
isFiniteDetermina si un valor es un número finito
isNaNDetermina si un valor es NaN o no
JSONProporciona funcionalidad para convertir valores JavaScript a y desde el formato JSON
MapRepresenta una colección de valores, donde cada valor puede aparecer solo una vez
MathProporciona acceso a funciones y constantes matemáticas
NumberRepresenta un valor numérico
ObjectRepresenta el objeto que es la base de todos los objetos JavaScript
parseFloatAnaliza un argumento de cadena y devuelve un número de punto flotante
parseIntAnaliza un argumento de cadena y devuelve un entero de la base especificada
PromiseRepresenta la eventual finalización (o fallo) de una operación asíncrona y su valor resultante
ProxyRepresenta 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)
queueMicrotaskEncola una microtarea para ser ejecutada
RangeErrorRepresenta un error cuando un valor no está en el conjunto o rango de valores permitidos
ReferenceErrorRepresenta un error cuando se referencia una variable inexistente
ReflectProporciona métodos para operaciones JavaScript interceptables
RegExpRepresenta una expresión regular, permitiendo coincidir combinaciones de caracteres
SetRepresenta una colección de valores, donde cada valor puede aparecer solo una vez
setIntervalLlama repetidamente a una función, con un retraso de tiempo fijo entre cada llamada
setTimeoutLlama a una función o evalúa una expresión después de un número especificado de milisegundos
SharedArrayBufferRepresenta un búfer genérico de datos binarios en crudo de longitud fija
StringRepresenta una secuencia de caracteres
structuredCloneCrea una copia profunda de un valor
SymbolRepresenta un tipo de dato único e inmutable que se utiliza como clave de una propiedad de objeto
SyntaxErrorRepresenta un error al intentar interpretar código sintácticamente inválido
TypeErrorRepresenta un error cuando un valor no es del tipo esperado
Uint8ArrayRepresenta un arreglo tipado de enteros sin signo de 8 bits
Uint8ClampedArrayRepresenta un arreglo tipado de enteros sin signo de 8 bits limitados a 0-255
Uint32ArrayRepresenta un arreglo tipado de enteros sin signo de 32 bits
URIErrorRepresenta un error cuando se usa una función global de manejo de URI de manera incorrecta
URLRepresenta un objeto que proporciona métodos estáticos para crear URLs de objetos
URLPatternRepresenta un patrón de URL
URLSearchParamsRepresenta una colección de pares clave/valor
WeakMapRepresenta una colección de pares clave/valor en la que las claves tienen referencias débiles
WeakSetRepresenta una colección de objetos en la que cada objeto puede aparecer solo una vez
WebAssemblyProporciona 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:

APIDescripción
evalEvalúa código JavaScript representado como una cadena
new Function(evalString)Crea una nueva función con el código proporcionado como argumento
WebAssembly.compileCompila un módulo WebAssembly desde un origen de buffer
WebAssembly.instantiateCompila 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:

middleware.ts
export const config = {
  unstable_allowDynamic: [
    // permite un solo archivo
    '/lib/utilities.js',
    // usa un glob para permitir cualquier cosa en el módulo de terceros function-bind
    '**/node_modules/function-bind/**',
  ],
}

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.

On this page