Tous les guides
Déployer3 min de lecture

L’erreur « export named 'styleText' »

Le message parle d’un export absent dans un module interne de Node, et ne prononce jamais le mot « version ». C’est pourtant tout le sujet : votre projet est compilé par un Node plus ancien que celui qu’exige Vite. Voici la version à viser, et pourquoi la première qui fait disparaître ce message n’est pas la bonne.

Ce que ce guide démontre

  • Le même projet Vite 8 compilé sous six versions de Node, avec le résultat de chacune.
  • La version à partir de laquelle le message disparaît, et celle à partir de laquelle la compilation réussit vraiment.
  • Une commande pour savoir en une seconde si votre Node est concerné.

Le message

$ npm ci && npx vite build, sous Node 18.20.5
file:///app/node_modules/rolldown/dist/shared/create-bundler-option-DJpvtSqr.mjs:8
import { formatWithOptions, styleText } from "node:util";
                            ^^^^^^^^^
SyntaxError: The requested module 'node:util' does not provide an export named 'styleText'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:123:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:191:5)
    at async ModuleLoader.import (node:internal/modules/esm/loader:337:24)

Node.js v18.20.5
Sortie réelle, dans un conteneur node:18.20.5 (linux/amd64), le 23 septembre 2026.

styleText est une fonction de Node qui colore le texte dans le terminal. Elle n’existe qu’à partir de Node 20.12 et 21.7. Vite 8 et son moteur de compilation, rolldown, l’importent dès leur chargement : sous un Node plus ancien, l’import échoue avant même que la compilation commence.

Si vous voyez ce message, votre projet n’est pas en cause. C’est la version de Node qui le compile, chez vous, dans votre CI ou chez votre hébergeur, qui est trop vieille.

Version par version

Le piège est de corriger juste assez pour faire disparaître le message. Nous avons compilé le même projet sous six versions de Node, sans rien changer d’autre.

NodestyleText existeRésultat de vite build
18.20.5nonéchec : export named 'styleText'
20.11.1nonéchec : export named 'styleText'
20.12.0ouiéchec : Cannot find native binding
20.18.1ouiéchec : Cannot find native binding
22.11.0ouiéchec : Cannot find native binding
22.12.0ouicompilé en 837 ms
Méthode. Un projet Vite 8.3.0 (rolldown 1.2.9), verrou de dépendances fabriqué sur un Mac. Pour chaque version : image Docker officielle node:<version> en linux/amd64, npm ci puis npx vite build. La présence de styleText est lue avec import("node:util"). Mesuré depuis conteneurs Docker linux/amd64, le 23 septembre 2026.

Entre Node 20.12 et 22.11, styleText existe et le message disparaît. Mais la compilation échoue aussitôt sur une autre erreur, « Cannot find native binding », qui accuse npm et n’a pourtant rien à voir avec lui. La vraie exigence de Vite 8 est plus haute : ^20.19.0 || >=22.12.0. C’est ce seuil qu’il faut viser, pas celui de styleText.

La correction

Déclarez la version dans le projet lui-même. Vercel, Netlify et Nixpacks lisent au moins l’un de ces deux fichiers, et la déclaration voyage avec le code au lieu de dépendre d’un réglage oublié dans une interface.

package.json
{
  "engines": {
    "node": ">=22.12"
  }
}
Au moins 22.12, et non « 22 » tout court : certains environnements servent encore 22.11.
.nvmrc
22
Lu par nvm en local et par Netlify, qui prennent la dernière 22, et par Nixpacks, qui n’en retient que le numéro majeur.

Sur votre machine, nvm install 22 puis nvm use 22 installent la dernière version 22. Sur Vercel, la version se choisit aussi dans les réglages du projet, rubrique Build and Deployment ; sur Netlify, par la variable NODE_VERSION. Dans les deux cas, le package.json reste la déclaration la plus sûre.

Sources

  1. [1]Documentation de Node.js, util.styleText, la fonction est ajoutée en v21.7.0 et v20.12.0.
  2. [2]Le package.json de Vite 8.3.0, champ engines : ^20.19.0 || >=22.12.0. Même exigence pour rolldown 1.2.9 et pour ses binaires natifs.
  3. [3]Nos essais, images Docker officielles node:18.20.5, 20.11.1, 20.12.0, 20.18.1, 22.11.0 et 22.12.0, le 23 septembre 2026.

Votre projet en ligne. Hébergé en Suisse.

Un dépôt, une archive ou un site déjà en ligne. On détecte, on compile, on met en ligne en HTTPS. 30 jours offerts.