Le message
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.5styleText 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.
| Node | styleText existe | Résultat de vite build |
|---|---|---|
| 18.20.5 | non | échec : export named 'styleText' |
| 20.11.1 | non | échec : export named 'styleText' |
| 20.12.0 | oui | échec : Cannot find native binding |
| 20.18.1 | oui | échec : Cannot find native binding |
| 22.11.0 | oui | échec : Cannot find native binding |
| 22.12.0 | oui | compilé en 837 ms |
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.
{
"engines": {
"node": ">=22.12"
}
}22Sur 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]Documentation de Node.js, util.styleText, la fonction est ajoutée en v21.7.0 et v20.12.0.
- [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]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.