Runtime Edge

Next.js propose deux runtimes serveur que vous pouvez utiliser dans votre application :

  • Le Runtime Node.js (par défaut), qui a accès à toutes les API Node.js et est utilisé pour le rendu de votre application.
  • Le Runtime Edge qui contient un ensemble plus limité d'API, utilisé dans les Middleware.

Limitations

  • Le Runtime Edge ne prend pas en charge toutes les API Node.js. Certains packages peuvent ne pas fonctionner comme prévu.
  • Le Runtime Edge ne prend pas en charge la Régénération Statique Incrémentale (ISR).
  • Les deux runtimes peuvent prendre en charge le streaming selon l'adaptateur de déploiement utilisé.

Référence

Le Runtime Edge prend en charge les API suivantes :

API Réseau

APIDescription
BlobReprésente un blob
fetchRécupère une ressource
FetchEventReprésente un événement de fetch
FileReprésente un fichier
FormDataReprésente des données de formulaire
HeadersReprésente des en-têtes HTTP
RequestReprésente une requête HTTP
ResponseReprésente une réponse HTTP
URLSearchParamsReprésente des paramètres URL
WebSocketReprésente une connexion websocket

API d'Encodage

APIDescription
atobDécode une chaîne encodée en base-64
btoaEncode une chaîne en base-64
TextDecoderDécode un Uint8Array en chaîne
TextDecoderStreamDécodeur chaînable pour les flux
TextEncoderEncode une chaîne en Uint8Array
TextEncoderStreamEncodeur chaînable pour les flux

API de Flux

APIDescription
ReadableStreamReprésente un flux lisible
ReadableStreamBYOBReaderReprésente un lecteur de ReadableStream
ReadableStreamDefaultReaderReprésente un lecteur de ReadableStream
TransformStreamReprésente un flux de transformation
WritableStreamReprésente un flux inscriptible
WritableStreamDefaultWriterReprésente un écrivain de WritableStream

API Cryptographiques

APIDescription
cryptoFournit un accès aux fonctionnalités cryptographiques de la plateforme
CryptoKeyReprésente une clé cryptographique
SubtleCryptoFournit un accès aux primitives cryptographiques courantes comme le hachage, la signature, le chiffrement ou le déchiffrement

API Web Standards

APIDescription
AbortControllerPermet d'annuler une ou plusieurs requêtes DOM à volonté
ArrayReprésente un tableau de valeurs
ArrayBufferReprésente un tampon de données binaires brutes générique de longueur fixe
AtomicsFournit des opérations atomiques sous forme de méthodes statiques
BigIntReprésente un nombre entier avec une précision arbitraire
BigInt64ArrayReprésente un tableau typé d'entiers signés sur 64 bits
BigUint64ArrayReprésente un tableau typé d'entiers non signés sur 64 bits
BooleanReprésente une entité logique et peut avoir deux valeurs : true et false
clearIntervalAnnule une action répétitive programmée précédemment établie par un appel à setInterval()
clearTimeoutAnnule une action programmée précédemment établie par un appel à setTimeout()
consoleFournit un accès à la console de débogage du navigateur
DataViewReprésente une vue générique d'un ArrayBuffer
DateReprésente un moment unique dans un format indépendant de la plateforme
decodeURIDécode un identifiant de ressource uniforme (URI) précédemment créé par encodeURI ou par une routine similaire
decodeURIComponentDécode un composant d'identifiant de ressource uniforme (URI) précédemment créé par encodeURIComponent ou par une routine similaire
DOMExceptionReprésente une erreur survenant dans le DOM
encodeURIEncode un identifiant de ressource uniforme (URI) en remplaçant chaque instance de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant l'encodage UTF-8 du caractère
encodeURIComponentEncode un composant d'identifiant de ressource uniforme (URI) en remplaçant chaque instance de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant l'encodage UTF-8 du caractère
ErrorReprésente une erreur lors de l'exécution d'une instruction ou de l'accès à une propriété
EvalErrorReprésente une erreur liée à la fonction globale eval()
Float32ArrayReprésente un tableau typé de nombres à virgule flottante sur 32 bits
Float64ArrayReprésente un tableau typé de nombres à virgule flottante sur 64 bits
FunctionReprésente une fonction
InfinityReprésente la valeur mathématique Infini
Int8ArrayReprésente un tableau typé d'entiers signés sur 8 bits
Int16ArrayReprésente un tableau typé d'entiers signés sur 16 bits
Int32ArrayReprésente un tableau typé d'entiers signés sur 32 bits
IntlFournit un accès aux fonctionnalités d'internationalisation et de localisation
isFiniteDétermine si une valeur est un nombre fini
isNaNDétermine si une valeur est NaN ou non
JSONFournit des fonctionnalités pour convertir des valeurs JavaScript vers et depuis le format JSON
MapReprésente une collection de valeurs, où chaque valeur ne peut apparaître qu'une seule fois
MathFournit un accès aux fonctions et constantes mathématiques
NumberReprésente une valeur numérique
ObjectReprésente l'objet qui est la base de tous les objets JavaScript
parseFloatAnalyse un argument de chaîne et renvoie un nombre à virgule flottante
parseIntAnalyse un argument de chaîne et renvoie un entier de la base spécifiée
PromiseReprésente l'achèvement (ou l'échec) éventuel d'une opération asynchrone, et sa valeur résultante
ProxyReprésente un objet utilisé pour définir un comportement personnalisé pour des opérations fondamentales (par exemple, recherche de propriété, affectation, énumération, invocation de fonction, etc)
queueMicrotaskMet en file d'attente une microtâche à exécuter
RangeErrorReprésente une erreur lorsqu'une valeur n'est pas dans l'ensemble ou la plage de valeurs autorisées
ReferenceErrorReprésente une erreur lorsqu'une variable inexistante est référencée
ReflectFournit des méthodes pour des opérations JavaScript interceptables
RegExpReprésente une expression régulière, permettant de faire correspondre des combinaisons de caractères
SetReprésente une collection de valeurs, où chaque valeur ne peut apparaître qu'une seule fois
setIntervalAppelle une fonction de manière répétée, avec un délai fixe entre chaque appel
setTimeoutAppelle une fonction ou évalue une expression après un nombre spécifié de millisecondes
SharedArrayBufferReprésente un tampon de données binaires brutes générique de longueur fixe
StringReprésente une séquence de caractères
structuredCloneCrée une copie profonde d'une valeur
SymbolReprésente un type de données unique et immuable utilisé comme clé d'une propriété d'objet
SyntaxErrorReprésente une erreur lors de la tentative d'interprétation d'un code syntaxiquement invalide
TypeErrorReprésente une erreur lorsqu'une valeur n'est pas du type attendu
Uint8ArrayReprésente un tableau typé d'entiers non signés sur 8 bits
Uint8ClampedArrayReprésente un tableau typé d'entiers non signés sur 8 bits limités à 0-255
Uint32ArrayReprésente un tableau typé d'entiers non signés sur 32 bits
URIErrorReprésente une erreur lorsqu'une fonction globale de gestion d'URI est utilisée de manière incorrecte
URLReprésente un objet fournissant des méthodes statiques utilisées pour créer des URL d'objet
URLPatternReprésente un modèle d'URL
URLSearchParamsReprésente une collection de paires clé/valeur
WeakMapReprésente une collection de paires clé/valeur dans laquelle les clés sont référencées faiblement
WeakSetReprésente une collection d'objets dans laquelle chaque objet ne peut apparaître qu'une seule fois
WebAssemblyFournit un accès à WebAssembly

Polyfills spécifiques à Next.js

Variables d'environnement

Vous pouvez utiliser process.env pour accéder aux Variables d'environnement à la fois pour next dev et next build.

APIs non prises en charge

Le Runtime Edge comporte certaines restrictions, notamment :

  • Les APIs natives de Node.js ne sont pas prises en charge. Par exemple, vous ne pouvez pas lire ou écrire dans le système de fichiers.
  • Les node_modules peuvent être utilisés, à condition qu'ils implémentent les ES Modules et n'utilisent pas d'APIs natives de Node.js.
  • L'appel direct à require est interdit. Utilisez plutôt les ES Modules.

Les fonctionnalités suivantes du langage JavaScript sont désactivées et ne fonctionneront pas :

APIDescription
evalÉvalue du code JavaScript représenté sous forme de chaîne de caractères
new Function(evalString)Crée une nouvelle fonction avec le code fourni en argument
WebAssembly.compileCompile un module WebAssembly à partir d'une source buffer
WebAssembly.instantiateCompile et instancie un module WebAssembly à partir d'une source buffer

Dans de rares cas, votre code pourrait contenir (ou importer) des instructions d'évaluation dynamique de code qui ne peuvent pas être atteintes à l'exécution et qui ne peuvent pas être supprimées par l'élagage d'arbre (treeshaking). Vous pouvez assouplir la vérification pour autoriser des fichiers spécifiques dans votre configuration de Middleware :

middleware.ts
export const config = {
  unstable_allowDynamic: [
    // autorise un seul fichier
    '/lib/utilities.js',
    // utilise un glob pour autoriser tout dans le module tiers function-bind
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic est un glob, ou un tableau de globs, qui ignore l'évaluation dynamique de code pour des fichiers spécifiques. Les globs sont relatifs au dossier racine de votre application.

Attention : si ces instructions sont exécutées sur le Edge, elles généreront une erreur et provoqueront une erreur d'exécution.

On this page