Edge Runtime
Next.js предоставляет две среды выполнения (runtime) для серверной части вашего приложения:
- Node.js Runtime (по умолчанию) — имеет доступ ко всем API Node.js и используется для рендеринга приложения.
- Edge Runtime — предоставляет ограниченный набор API и используется в Middleware.
Ограничения
- Edge Runtime не поддерживает все API Node.js. Некоторые пакеты могут работать некорректно.
- Edge Runtime не поддерживает инкрементальную статическую регенерацию (ISR).
- Обе среды выполнения могут поддерживать потоковую передачу данных (streaming) в зависимости от используемого адаптера развёртывания.
Справочник API
Edge Runtime поддерживает следующие 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:
export const config = {
unstable_allowDynamic: [
// разрешает один файл
'/lib/utilities.js',
// используйте glob для разрешения всего в стороннем модуле function-bind
'**/node_modules/function-bind/**',
],
}
unstable_allowDynamic
— это glob или массив glob-шаблонов, игнорирующих динамическую оценку кода для определённых файлов. Шаблоны указываются относительно корневой папки вашего приложения.
Имейте в виду, что если эти операторы будут выполнены на Edge, они вызовут ошибку во время выполнения.