Installer Node.js : vérifier le fonctionnement des boutons sur le serveur sans navigateur

Mention d'affiliation v3.1
Mention d'affiliation v3.2 (mobile)
Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-10-19

Pour exécuter du JavaScript sur un serveur, il faut d’abord installer Node.js. J’ai installé Node.js 24.21.0 sur un serveur WordPress sous Nginx et Apache, puis vérifié sans navigateur le script des boutons d’une page web avec jsdom 30.1.3.

Le nodejs du dépôt par défaut est en 16.20.2, alors que jsdom 30.1.3, utilisé pour vérifier les scripts, exige Node.js 22.22.2 ou plus. J’ai donc installé à partir du flux de module dnf 24.

1️⃣ Pourquoi installer Node.js et jsdom sur le serveur

Pour vérifier les scripts de boutons sur un serveur, il faut deux choses : Node.js et jsdom.

🔲 Node.js

Le JavaScript s’exécute normalement dans le navigateur, mais une fois Node.js installé, le serveur peut lui aussi lire et exécuter du JavaScript.

Installer Node.js, c’est placer aussi sur le serveur le moteur d’exécution JavaScript qui n’existait jusque-là que dans le navigateur. C’est pourquoi on utilise Node.js pour créer des serveurs web, écrire des commandes qui traitent de nombreux fichiers d’un coup, ou charger des paquets comme jsdom pour vérifier des pages. Ghost est lui aussi un CMS qui tourne sur Node.js.

🔲 jsdom

jsdom est un paquet Node.js qui lit du HTML et en fait un document dont on peut cliquer les boutons comme dans un navigateur. Il reconstruit dans le serveur, sans écran, la structure de document (DOM) qu’un navigateur crée en ouvrant une page : les scripts trouvent donc les boutons et changent le texte comme dans un vrai navigateur. Comme aucune fenêtre ne s’ouvre, il se lance sur le serveur avec une seule ligne de commande.

Autrement dit, les vérifications qu’une personne faisait en ouvrant un navigateur et en cliquant un à un sont prises en charge par le serveur avec une commande. C’est pourquoi jsdom sert aussi à tester automatiquement le comportement des boutons après chaque correction, à extraire d’une page seulement des contenus comme les titres et les liens, ou à retoucher en masse le HTML des articles.

Si l’on récupère une page avec PHP ou curl, on ne voit que le HTML envoyé au départ. Le texte qui change après un clic sur un bouton n’apparaît que lorsque le script s’exécute.

Le navigateur passe par quatre étapes : recevoir la page, lire la page, cliquer sur le bouton et afficher à l’écran. jsdom exécute sur le serveur toutes les étapes sauf l’affichage, c’est pourquoi la position et la taille des boutons se vérifient dans le navigateur.

🧩 Ce que font le navigateur et jsdom
Schéma explicatif
🖥️ Exécuté par
Recevoir la pageReçoit le HTML du serveur
Lire la pageRepère ce qui se trouve où
Cliquer sur le boutonLes scripts changent le texte
Afficher à l'écranDessine position, taille et polices
Changement de texte ✓Erreurs ✓Position · taille ✓Position · taille ✗ (vérifier dans le navigateur)
Le navigateur passe par les quatre étapes.
jsdom n'exécute que les trois premières étapes sur le serveur.

2️⃣ Avant l’installation : dépôt par défaut et flux de modules

Avant de lancer [dnf install nodejs], on vérifie d’abord quelle version serait installée. Le nodejs du dépôt par défaut d’AlmaLinux 9.8 est en 16.20.2.

dnf list --available nodejs
Available Packages
nodejs.x86_64                    1:16.20.2-8.el9_4                     appstream

Le dépôt de modules propose quatre flux : 18, 20, 22 et 24. À la date de vérification, le flux 22 était en 22.23.2 et le flux 24 en 24.21.0.

dnf module list nodejs
nodejs 18     common [d], development, minimal, s2i Javascript runtime
nodejs 20     common [d], development, minimal, s2i Javascript runtime
nodejs 22     common [d], development, minimal, s2i Javascript runtime
nodejs 24     common [d], development, minimal, s2i Javascript runtime

D’après le registre npm, jsdom 30.1.3 exige la 22.22.2 ou plus dans la branche 22, la 24.15.0 ou plus dans la branche 24, ou la 26 et au-delà. Les flux 22 et 24 remplissent tous deux cette condition.

3️⃣ Installer Node.js : dnf module

Cette fois, j’ai installé le flux 24 et, avant de lancer la commande, j’ai d’abord vérifié avec l’option [--assumeno] la liste des paquets qui seraient installés.

dnf module install nodejs:24 --assumeno

La liste ne comprenait que cinq paquets : nodejs, npm, nodejs-libs, nodejs-docs et nodejs-full-i18n. Aucun paquet de serveur web, de PHP ni de noyau n’y figurait. Après vérification, on lance l’installation avec l’option [-y].

dnf module install -y nodejs:24
Dependencies resolved.
==============================================================================================
 Package            Architecture  Version                                    Repository  Size
==============================================================================================
Installing group/module packages:
 nodejs             x86_64  1:24.21.0-1.module_el9.8.0+321+1555b6a2           appstream   70 k
 npm                noarch  1:11.19.0-1.24.21.0.1.module_el9.8.0+321+1555b6a2 appstream  2.1 M
Installing dependencies:
 nodejs-libs        x86_64  1:24.21.0-1.module_el9.8.0+321+1555b6a2           appstream   24 M
Installing weak dependencies:
 nodejs-docs        noarch  1:24.21.0-1.module_el9.8.0+321+1555b6a2           appstream  5.3 M
 nodejs-full-i18n   x86_64  1:24.21.0-1.module_el9.8.0+321+1555b6a2           appstream  8.9 M
Installing module profiles:
 nodejs/common                                                                                
Enabling module streams:
 nodejs                     24                                                                

Transaction Summary
==============================================================================================
Install  5 Packages

Total download size: 40 M
Installed size: 185 M

[Installing weak dependencies] liste les dépendances faibles (weak dependencies), des paquets qu’il est utile d’installer en même temps. Le téléchargement fait 40M et l’installation 185M.

node -v
v24.21.0
npm -v
11.19.0
cat /etc/dnf/modules.d/nodejs.module
[nodejs]
name=nodejs
stream=24
profiles=common
state=enabled

node a été installé en 24.21.0 et npm en 11.19.0. Le seul fichier de configuration modifié par l’installation est [/etc/dnf/modules.d/nodejs.module], qui enregistre le flux 24 et le profil common comme actifs.

4️⃣ Installer jsdom et vérifier le script d’un bouton

jsdom s’installe avec npm dans un dossier de travail, que l’on crée en dehors de la racine web.

mkdir ~/jsdom-test && cd ~/jsdom-test
npm init -y

[npm init -y] crée package.json avec les valeurs par défaut, puis jsdom est installé dans le même dossier.

npm install jsdom
added 36 packages, and audited 37 packages in 2s

8 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm ls jsdom
jsdom-test@1.0.0 /root/jsdom-test
└── jsdom@30.1.3

36 paquets, dont jsdom 30.1.3, ont été installés, avec 0 vulnérabilité connue. Le dossier node_modules du dossier de travail pèse 26M.

node -e 'const { JSDOM } = require(`jsdom`); console.log(new JSDOM(`<h1>Bonjour</h1>`).window.document.querySelector(`h1`).textContent)'
Bonjour

Si jsdom lit comme document un HTML composé d’une seule balise h1 et affiche le texte qu’elle contient, [Bonjour], la vérification est terminée.

Vérifier le script d’un bouton, c’est contrôler sur le serveur que le texte change correctement après le clic. En exemple, j’ai créé dans le dossier de travail un fichier HTML où un clic sur le bouton [Copier] change le texte en [Copié].

cat btn.html
<button id="copy">Copier</button>
<script>
document.getElementById('copy').addEventListener('click', function () {
  this.textContent = 'Copié';
});
</script>

Le script de vérification lit le fichier HTML avec jsdom, exécute ses scripts et affiche le texte avant et après le clic. Les erreurs de script s’affichent sur des lignes commençant par [Erreur:].

cat check.js
const fs = require('fs');
const { JSDOM, VirtualConsole } = require('jsdom');

const vc = new VirtualConsole();
vc.on('jsdomError', (e) => console.log('Erreur:', e.message));

const dom = new JSDOM(fs.readFileSync(process.argv[2], 'utf8'), {
  runScripts: 'dangerously',
  virtualConsole: vc,
});
const btn = dom.window.document.querySelector('#copy');
console.log('Avant le clic:', btn.textContent);
btn.click();
console.log('Après le clic:', btn.textContent);
node check.js btn.html
Avant le clic: Copier
Après le clic: Copié

Après le clic, le texte devient [Copié] : le script du bouton fonctionne bien.

Une seule faute de frappe dans le script change le résultat. J’ai lancé la même vérification sur un fichier où le I majuscule de getElementById était remplacé par un l minuscule.

sed 's/getElementById/getElementByld/' btn.html > btn-broken.html
node check.js btn-broken.html
Erreur: Uncaught [TypeError: document.getElementByld is not a function]
Avant le clic: Copier
Après le clic: Copier

Une erreur s’affiche sur la première ligne et le script s’arrête : le texte reste [Copier] même après le clic.

J’ai donné au bouton une largeur de 120px et une hauteur de 40px en CSS, puis affiché sa taille.

cat size.js
const { JSDOM } = require('jsdom');
const dom = new JSDOM('<button id="copy" style="width:120px;height:40px">Copier</button>');
const btn = dom.window.document.querySelector('#copy');
console.log('hauteur:', btn.offsetHeight, '/ largeur:', btn.getBoundingClientRect().width);
node size.js
hauteur: 0 / largeur: 0

jsdom n’a pas d’étape de dessin à l’écran : la hauteur et la largeur s’affichent donc à 0.

🔢 FAQ & contenus recommandés

Le registre npm indique que jsdom 30.1.3 exige Node.js 22.22.2 ou plus, 24.15.0 ou plus, ou 26 et au-delà : les flux 18 et 20 ne remplissent donc pas cette condition.

[which node] n’affiche pas un node absent du PATH. Sur le serveur vérifié, [which node] ne renvoyait rien, mais un Node.js 18.4.0 installé par le paquet pip nodejs-bin se trouvait dans un dossier utilisateur.

[d] indique la valeur par défaut (default) ; s’il suit le profil common, c’est le profil common qui est installé lorsqu’on installe sans préciser de profil.

🧭 Articles recommandés sur la gestion des paquets 9 articles · 2 références
🗂️ Gestion des paquets
📄 Commande yum 📄 Commande yum-config-manager 📄 Différences entre RPM et YUM 📄 Commandes apt · apt-get 📄 Installer snapd
📄 Installer Node.js 📄 Installer Nginx · PHP sur CentOS 7 📄 Installer phpMyAdmin 📄 Installer et configurer PHP-FPM
📡 DNF Module Command 📡 Node.js Previous Releases

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 10   +   1   =