Edge Runtime

Edge Runtime в Next.js основан на стандартных Web API и поддерживает следующие API:

Сетевые API

APIОписание
BlobПредставляет blob-объект
fetchПолучает ресурс
FetchEventПредставляет событие fetch
FileПредставляет файл
FormDataПредставляет данные формы
HeadersПредставляет HTTP-заголовки
RequestПредставляет HTTP-запрос
ResponseПредставляет HTTP-ответ
URLSearchParamsПредставляет параметры URL-поиска
WebSocketПредставляет websocket-соединение

API кодирования

APIОписание
atobДекодирует строку в кодировке base-64
btoaКодирует строку в base-64
TextDecoderДекодирует Uint8Array в строку
TextDecoderStreamЦепной декодер для потоков
TextEncoderКодирует строку в Uint8Array
TextEncoderStreamЦепной кодировщик для потоков

Потоковые API

APIОписание
ReadableStreamПредставляет читаемый поток
ReadableStreamBYOBReaderПредставляет читатель ReadableStream
ReadableStreamDefaultReaderПредставляет читатель ReadableStream
TransformStreamПредставляет преобразующий поток
WritableStreamПредставляет записываемый поток
WritableStreamDefaultWriterПредставляет писатель WritableStream

Криптографические API

APIОписание
cryptoПредоставляет доступ к криптографическим функциям платформы
CryptoKeyПредставляет криптографический ключ
SubtleCryptoПредоставляет доступ к распространённым криптографическим примитивам: хешированию, подписи, шифрованию и дешифрованию

Веб-стандарты API

APIОписание
AbortControllerПозволяет прерывать один или несколько DOM-запросов по необходимости
ArrayПредставляет массив значений
ArrayBufferПредставляет буфер бинарных данных фиксированной длины
AtomicsПредоставляет атомарные операции в виде статических методов
BigIntПредставляет целое число произвольной точности
BigInt64ArrayПредставляет типизированный массив 64-битных знаковых целых чисел
BigUint64ArrayПредставляет типизированный массив 64-битных беззнаковых целых чисел
BooleanПредставляет логическую сущность и может иметь два значения: true и false
clearIntervalОтменяет повторяющееся действие, установленное вызовом setInterval()
clearTimeoutОтменяет отложенное действие, установленное вызовом setTimeout()
consoleПредоставляет доступ к консоли отладки браузера
DataViewПредставляет обобщённое представление ArrayBuffer
DateПредставляет момент времени в платформонезависимом формате
decodeURIДекодирует URI, ранее созданный encodeURI или аналогичной функцией
decodeURIComponentДекодирует компонент URI, ранее созданный encodeURIComponent или аналогичной функцией
DOMExceptionПредставляет ошибку, возникающую в DOM
encodeURIКодирует URI, заменяя определённые символы escape-последовательностями UTF-8
encodeURIComponentКодирует компонент URI, заменяя определённые символы escape-последовательностями UTF-8
ErrorПредставляет ошибку при выполнении оператора или доступе к свойству
EvalErrorПредставляет ошибку, связанную с глобальной функцией eval()
Float32ArrayПредставляет типизированный массив 32-битных чисел с плавающей точкой
Float64ArrayПредставляет типизированный массив 64-битных чисел с плавающей точкой
FunctionПредставляет функцию
InfinityПредставляет математическое значение бесконечности
Int8ArrayПредставляет типизированный массив 8-битных знаковых целых чисел
Int16ArrayПредставляет типизированный массив 16-битных знаковых целых чисел
Int32ArrayПредставляет типизированный массив 32-битных знаковых целых чисел
IntlПредоставляет функциональность для интернационализации и локализации
isFiniteОпределяет, является ли значение конечным числом
isNaNОпределяет, является ли значение NaN
JSONПредоставляет функциональность для преобразования значений JavaScript в формат JSON и обратно
MapПредставляет коллекцию значений, где каждое значение может встречаться только один раз
MathПредоставляет доступ к математическим функциям и константам
NumberПредставляет числовое значение
ObjectПредставляет базовый объект для всех объектов JavaScript
parseFloatПарсит строку и возвращает число с плавающей точкой
parseIntПарсит строку и возвращает целое число указанной системы счисления
PromiseПредставляет результат асинхронной операции (успешный или неудачный)
ProxyПозволяет определять кастомное поведение для базовых операций (поиск свойств, присваивание, перечисление, вызов функций и т.д.)
queueMicrotaskСтавит микрозадачу в очередь на выполнение
RangeErrorПредставляет ошибку, когда значение выходит за допустимые пределы
ReferenceErrorПредставляет ошибку при обращении к несуществующей переменной
ReflectПредоставляет методы для перехватываемых операций JavaScript
RegExpПредставляет регулярное выражение для сопоставления символов
SetПредставляет коллекцию уникальных значений
setIntervalВызывает функцию повторно с фиксированной задержкой
setTimeoutВызывает функцию или выполняет выражение после указанной задержки
SharedArrayBufferПредставляет буфер бинарных данных фиксированной длины для совместного использования
StringПредставляет последовательность символов
structuredCloneСоздаёт глубокую копию значения
SymbolПредставляет уникальный и неизменяемый тип данных, используемый как ключ свойства объекта
SyntaxErrorПредставляет ошибку при интерпретации синтаксически неверного кода
TypeErrorПредставляет ошибку, когда значение имеет неожиданный тип
Uint8ArrayПредставляет типизированный массив 8-битных беззнаковых целых чисел
Uint8ClampedArrayПредставляет типизированный массив 8-битных беззнаковых целых чисел, ограниченных диапазоном 0-255
Uint32ArrayПредставляет типизированный массив 32-битных беззнаковых целых чисел
URIErrorПредставляет ошибку при неправильном использовании функций обработки URI
URLПредоставляет статические методы для создания URL-объектов
URLPatternПредставляет шаблон URL
URLSearchParamsПредставляет коллекцию пар ключ/значение
WeakMapПредставляет коллекцию пар ключ/значение со слабыми ссылками на ключи
WeakSetПредставляет коллекцию объектов, где каждый объект может встречаться только один раз
WebAssemblyПредоставляет доступ к WebAssembly

Специфичные полифилы для Next.js

Переменные окружения

Вы можете использовать process.env для доступа к Переменным окружения как в next dev, так и в next build.

Неподдерживаемые API

Среда выполнения Edge Runtime имеет некоторые ограничения, включая:

  • Нативные API Node.js не поддерживаются. Например, вы не можете читать или записывать файлы в файловую систему.
  • node_modules можно использовать, если они реализуют ES Modules и не используют нативные API Node.js.
  • Прямой вызов require запрещен. Вместо этого используйте ES Modules.

Следующие возможности JavaScript отключены и не будут работать:

APIОписание
evalВыполняет JavaScript-код, представленный в виде строки
new Function(evalString)Создает новую функцию с кодом, переданным в качестве аргумента
WebAssembly.compileКомпилирует модуль WebAssembly из буферного источника
WebAssembly.instantiateКомпилирует и инстанцирует модуль WebAssembly из буферного источника

В редких случаях ваш код может содержать (или импортировать) некоторые выражения динамической оценки кода, которые не могут быть достигнуты во время выполнения и не могут быть удалены с помощью tree-shaking.
Вы можете ослабить проверку, разрешив определенные файлы в конфигурации вашего Middleware или Edge API Route:

export const config = {
  runtime: 'edge', // только для Edge API Routes
  unstable_allowDynamic: [
    // разрешает один файл
    '/lib/utilities.js',
    // используйте glob для разрешения всего в стороннем модуле function-bind
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic — это glob или массив glob-шаблонов, игнорирующих динамическую оценку кода для определенных файлов. Glob-шаблоны указываются относительно корневой папки вашего приложения.

Предупреждение: если эти выражения будут выполнены в Edge Runtime, они вызовут ошибку во время выполнения.