Mettre à jour Node.js corrige les failles, mais peut casser une application qui n'a pas suivi. Voici les messages les plus fréquents, tels que Node.js, npm et Yarn les affichent (en anglais uniquement). Les parties variables (chemins, noms de modules, numéros de version) sont remplacées par « … ».
Module ES chargé avec require() (ERR_REQUIRE_ESM)
Error [ERR_REQUIRE_ESM]: require() of ES Module … from … not supported.
Ce que ça veut dire : Du code CommonJS charge avec require() une dépendance publiée uniquement en module ES. Cela arrive souvent après la mise à jour d'une dépendance. Depuis Node.js 20.19, 22.12 et 23, require() sait charger la plupart des modules ES et ce code d'erreur est déprécié ; si le module utilise un await au niveau supérieur, Node.js renvoie alors ERR_REQUIRE_ASYNC_MODULE.
Ce que je fais : J'identifie la dépendance en cause, puis je passe à une version de Node.js qui sait la charger, je la remplace par import() ou je fige une version compatible.
Module introuvable (MODULE_NOT_FOUND)
Error: Cannot find module '…'
Ce que ça veut dire : Le chargeur de modules de Node.js ne trouve pas le fichier ou le paquet demandé : dépendances non réinstallées après la montée de version, chemin erroné, ou paquet qui a changé ses points d'entrée.
Ce que je fais : Je vérifie l'installation des dépendances et les points d'entrée déclarés, puis je corrige l'import ou la version du paquet.
Module natif compilé pour une autre version de Node.js
The module '…' was compiled against a different Node.js version using NODE_MODULE_VERSION … This version of Node.js requires NODE_MODULE_VERSION … Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).
Ce que ça veut dire : Un module natif (du code C ou C++ compilé, par exemple pour une base de données ou du traitement d'images) a été construit pour une autre version de Node.js. Chaque version majeure a son propre numéro NODE_MODULE_VERSION.
Ce que je fais : Je recompile les modules natifs pour la nouvelle version, ou je passe à une version du paquet compatible, et je refais l'image ou le déploiement proprement.
Algorithme refusé par OpenSSL 3 (ERR_OSSL_EVP_UNSUPPORTED)
error:0308010C:digital envelope routines::unsupported
Ce que ça veut dire : Depuis Node.js 17, Node.js embarque OpenSSL 3, qui refuse par défaut d'anciens algorithmes ou tailles de clé. Les vieux outils de build front (anciennes versions de webpack, par exemple) déclenchent souvent cette erreur. L'option --openssl-legacy-provider n'est qu'un contournement temporaire.
Ce que je fais : Je mets à jour l'outil qui utilise l'algorithme refusé plutôt que de laisser l'option de contournement en place.
Avertissement de dépréciation (DEP0005)
[DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
Ce que ça veut dire : Pas une panne : Node.js signale une API dépréciée, ici le constructeur Buffer(). Chaque dépréciation a un code DEP suivi de quatre chiffres, documenté par Node.js ; certaines finissent par être supprimées dans une version majeure suivante.
Ce que je fais : Je relève les avertissements DEP du journal, je remplace les API concernées et je vérifie celles qui disparaissent dans la version cible.
Version de Node.js refusée par un paquet
yarnThe engine "node" is incompatible with this module. Expected version … Got …
npmUnsupported engine
Ce que ça veut dire : Le champ engines du package.json d'une dépendance, ou de votre projet, n'accepte pas la version de Node.js installée. Yarn 1 bloque l'installation ; npm signale le code EBADENGINE sous forme d'avertissement, et bloque si l'option engine-strict est activée.
Ce que je fais : J'aligne la version de Node.js sur ce que demandent les dépendances, ou je mets à jour les dépendances qui exigent une version dépassée.
Fichier de verrouillage désynchronisé (npm ci)
`npm ci` can only install packages when your package.json and package-lock.json are in sync. Please update your lock file with `npm install` before continuing.
The `npm ci` command can only install with an existing package-lock.json with lockfileVersion >= 1.
Ce que ça veut dire : npm ci, utilisé en intégration continue et en déploiement, installe exactement ce que décrit le fichier package-lock.json. Il refuse si ce fichier manque ou ne correspond plus au package.json.
Ce que je fais : Je régénère le fichier de verrouillage de façon contrôlée, je relis les versions qui changent, et je le versionne avec le projet.