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.
Mises en garde
- 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émentielle (ISR).
- Les deux runtimes peuvent prendre en charge le streaming selon votre adaptateur de déploiement.
Référence
Le Runtime Edge prend en charge les API suivantes :
API réseau
API | Description |
---|---|
Blob | Représente un blob |
fetch | Récupère une ressource |
FetchEvent | Représente un événement fetch |
File | Représente un fichier |
FormData | Représente des données de formulaire |
Headers | Représente des en-têtes HTTP |
Request | Représente une requête HTTP |
Response | Représente une réponse HTTP |
URLSearchParams | Représente les paramètres de recherche d'URL |
WebSocket | Représente une connexion websocket |
API d'encodage
API | Description |
---|---|
atob | Décode une chaîne encodée en base-64 |
btoa | Encode une chaîne en base-64 |
TextDecoder | Décode un Uint8Array en chaîne |
TextDecoderStream | Décodeur chaînable pour les flux |
TextEncoder | Encode une chaîne en Uint8Array |
TextEncoderStream | Encodeur chaînable pour les flux |
API de flux
API | Description |
---|---|
ReadableStream | Représente un flux lisible |
ReadableStreamBYOBReader | Représente un lecteur de ReadableStream |
ReadableStreamDefaultReader | Représente un lecteur de ReadableStream |
TransformStream | Représente un flux de transformation |
WritableStream | Représente un flux inscriptible |
WritableStreamDefaultWriter | Représente un écrivain de WritableStream |
API cryptographiques
API | Description |
---|---|
crypto | Fournit un accès aux fonctionnalités cryptographiques de la plateforme |
CryptoKey | Représente une clé cryptographique |
SubtleCrypto | Fournit un accès aux primitives cryptographiques courantes comme le hachage, la signature, le chiffrement ou le déchiffrement |
API Web Standards
API | Description |
---|---|
AbortController | Permet d'interrompre une ou plusieurs requêtes DOM à volonté |
Array | Représente un tableau de valeurs |
ArrayBuffer | Représente un tampon de données binaires brutes générique et de longueur fixe |
Atomics | Fournit des opérations atomiques sous forme de méthodes statiques |
BigInt | Représente un nombre entier avec une précision arbitraire |
BigInt64Array | Représente un tableau typé d'entiers signés sur 64 bits |
BigUint64Array | Représente un tableau typé d'entiers non signés sur 64 bits |
Boolean | Représente une entité logique et peut avoir deux valeurs : true et false |
clearInterval | Annule une action répétitive programmée précédemment établie par un appel à setInterval() |
clearTimeout | Annule une action programmée précédemment établie par un appel à setTimeout() |
console | Fournit un accès à la console de débogage du navigateur |
DataView | Représente une vue générique d'un ArrayBuffer |
Date | Représente un instant unique dans un format indépendant de la plateforme |
decodeURI | Décode un identifiant de ressource uniforme (URI) précédemment créé par encodeURI ou par une routine similaire |
decodeURIComponent | Décode un composant d'URI précédemment créé par encodeURIComponent ou par une routine similaire |
DOMException | Représente une erreur survenant dans le DOM |
encodeURI | Encode un URI en remplaçant chaque instance de certains caractères par une à quatre séquences d'échappement représentant l'encodage UTF-8 du caractère |
encodeURIComponent | Encode un composant d'URI en remplaçant chaque instance de certains caractères par une à quatre séquences d'échappement représentant l'encodage UTF-8 du caractère |
Error | Représente une erreur lors de l'exécution d'une instruction ou de l'accès à une propriété |
EvalError | Représente une erreur liée à la fonction globale eval() |
Float32Array | Représente un tableau typé de nombres à virgule flottante sur 32 bits |
Float64Array | Représente un tableau typé de nombres à virgule flottante sur 64 bits |
Function | Représente une fonction |
Infinity | Représente la valeur mathématique Infini |
Int8Array | Représente un tableau typé d'entiers signés sur 8 bits |
Int16Array | Représente un tableau typé d'entiers signés sur 16 bits |
Int32Array | Représente un tableau typé d'entiers signés sur 32 bits |
Intl | Fournit un accès aux fonctionnalités d'internationalisation et de localisation |
isFinite | Détermine si une valeur est un nombre fini |
isNaN | Détermine si une valeur est NaN ou non |
JSON | Fournit des fonctionnalités pour convertir des valeurs JavaScript vers et depuis le format JSON |
Map | Représente une collection de valeurs où chaque valeur ne peut apparaître qu'une seule fois |
Math | Fournit un accès aux fonctions et constantes mathématiques |
Number | Représente une valeur numérique |
Object | Représente l'objet qui est la base de tous les objets JavaScript |
parseFloat | Analyse un argument de chaîne et renvoie un nombre à virgule flottante |
parseInt | Analyse un argument de chaîne et renvoie un entier de la base spécifiée |
Promise | Représente l'achèvement (ou l'échec) éventuel d'une opération asynchrone et sa valeur résultante |
Proxy | Représente un objet utilisé pour définir un comportement personnalisé pour des opérations fondamentales (comme la recherche de propriété, l'affectation, l'énumération, l'invocation de fonction, etc) |
queueMicrotask | Met en file d'attente une microtâche à exécuter |
RangeError | Représente une erreur lorsqu'une valeur n'est pas dans l'ensemble ou la plage des valeurs autorisées |
ReferenceError | Représente une erreur lorsqu'une variable inexistante est référencée |
Reflect | Fournit des méthodes pour des opérations JavaScript interceptables |
RegExp | Représente une expression régulière permettant de faire correspondre des combinaisons de caractères |
Set | Représente une collection de valeurs où chaque valeur ne peut apparaître qu'une seule fois |
setInterval | Appelle une fonction à plusieurs reprises, avec un délai fixe entre chaque appel |
setTimeout | Appelle une fonction ou évalue une expression après un nombre spécifié de millisecondes |
SharedArrayBuffer | Représente un tampon de données binaires brutes générique et de longueur fixe |
String | Représente une séquence de caractères |
structuredClone | Crée une copie profonde d'une valeur |
Symbol | Représente un type de données unique et immuable utilisé comme clé d'une propriété d'objet |
SyntaxError | Représente une erreur lors de l'interprétation d'un code syntaxiquement invalide |
TypeError | Représente une erreur lorsqu'une valeur n'est pas du type attendu |
Uint8Array | Représente un tableau typé d'entiers non signés sur 8 bits |
Uint8ClampedArray | Représente un tableau typé d'entiers non signés sur 8 bits limités à 0-255 |
Uint32Array | Représente un tableau typé d'entiers non signés sur 32 bits |
URIError | Représente une erreur lorsqu'une fonction globale de gestion d'URI est utilisée de manière incorrecte |
URL | Représente un objet fournissant des méthodes statiques utilisées pour créer des URL d'objet |
URLPattern | Représente un motif d'URL |
URLSearchParams | Représente une collection de paires clé/valeur |
WeakMap | Représente une collection de paires clé/valeur où les clés sont référencées faiblement |
WeakSet | Représente une collection d'objets où chaque objet ne peut apparaître qu'une seule fois |
WebAssembly | Fournit 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
.
API non prises en charge
Le Runtime Edge comporte certaines restrictions, notamment :
- Les API 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'API 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 :
API | Description |
---|---|
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 comme argument |
WebAssembly.compile | Compile un module WebAssembly à partir d'une source de tampon |
WebAssembly.instantiate | Compile et instancie un module WebAssembly à partir d'une source de tampon |
Dans de rares cas, votre code peut 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 la configuration de votre Middleware :
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.