Installare Node.js: verificare il funzionamento dei pulsanti sul server senza browser

Informativa sull'affiliazione v3.1
Informativa sull'affiliazione v3.2 (solo mobile)
Ambiente di testFamiglia RHELAlmaLinux 9.8account rootVerificato il 2026-10-19

Per eseguire JavaScript su un server bisogna prima installare Node.js. Ho installato Node.js 24.21.0 su un server WordPress con Nginx e Apache e, con jsdom 30.1.3, ho controllato senza browser lo script dei pulsanti di una pagina web.

Il nodejs del repository predefinito è la 16.20.2, ma jsdom 30.1.3, che uso per controllare gli script, richiede Node.js 22.22.2 o superiore. Per questo ho installato dallo stream del modulo dnf 24.

1️⃣ Perché installare Node.js e jsdom sul server

Per controllare gli script dei pulsanti su un server servono due cose: Node.js e jsdom.

🔲 Node.js

JavaScript di solito viene eseguito nel browser, ma installando Node.js anche il server può leggere ed eseguire JavaScript.

Installare Node.js significa mettere anche sul server l’ambiente di esecuzione JavaScript che prima c’era solo nel browser. Per questo Node.js si usa per creare server web, scrivere comandi che elaborano molti file in una volta o caricare pacchetti come jsdom e controllare le pagine. Anche Ghost è un CMS che gira su Node.js.

🔲 jsdom

jsdom è un pacchetto per Node.js che legge l’HTML e lo trasforma in un documento in cui si possono premere i pulsanti come in un browser. Ricrea nel server, senza schermo, la struttura del documento (DOM) che il browser costruisce quando apre una pagina, così gli script trovano i pulsanti e cambiano il testo come in un vero browser. Poiché non apre finestre, si esegue sul server con un solo comando.

In altre parole, i controlli che una persona faceva aprendo il browser e cliccando uno per uno vengono svolti dal server con un comando. Per questo jsdom si usa anche per testare automaticamente il comportamento dei pulsanti a ogni correzione, estrarre da una pagina solo contenuti come titoli e link o ritoccare in blocco l’HTML degli articoli.

Se scarichi una pagina con PHP o curl, vedi solo l’HTML arrivato all’inizio. Il testo che cambia dopo aver premuto un pulsante compare solo quando lo script viene eseguito.

Il browser esegue quattro passaggi: ricevere la pagina, leggere la pagina, premere il pulsante e mostrare sullo schermo. jsdom esegue sul server tutti i passaggi tranne la visualizzazione, quindi posizione e dimensioni di un pulsante si verificano nel browser.

🧩 Cosa fanno il browser e jsdom
Diagramma esplicativo
🖥️ Chi esegue
Ricevere la paginaRiceve l'HTML dal server
Leggere la paginaCapisce cosa c'è e dove
Premere il pulsanteGli script cambiano il testo
Mostrare sullo schermoDisegna posizione, dimensioni e font
Cambio di testo ✓Errori ✓Posizione · dimensioni ✓Posizione · dimensioni ✗ (verificare nel browser)
Il browser esegue tutti e quattro i passaggi.
jsdom esegue solo i primi tre passaggi sul server.

2️⃣ Prima dell’installazione: repository predefinito e stream dei moduli

Prima di eseguire [dnf install nodejs], controlla quale versione verrebbe installata. Il nodejs del repository predefinito di AlmaLinux 9.8 è la 16.20.2.

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

Il repository dei moduli ha quattro stream: 18, 20, 22 e 24. Alla data della verifica lo stream 22 era alla 22.23.2 e lo stream 24 alla 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

Secondo il registro npm, jsdom 30.1.3 richiede la 22.22.2 o superiore nella serie 22, la 24.15.0 o superiore nella serie 24, oppure la 26 e successive. Sia lo stream 22 sia il 24 soddisfano questa condizione.

3️⃣ Installare Node.js: dnf module

Questa volta ho installato lo stream 24 e, prima di eseguirlo, ho controllato con l’opzione [--assumeno] l’elenco dei pacchetti da installare.

dnf module install nodejs:24 --assumeno

L’elenco conteneva solo cinque pacchetti: nodejs, npm, nodejs-libs, nodejs-docs e nodejs-full-i18n. Non c’erano pacchetti del server web, di PHP né del kernel. Dopo il controllo si procede all’installazione con l’opzione [-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] elenca le dipendenze deboli (weak dependencies), pacchetti che conviene installare insieme. Il download è di 40M e l’installazione di 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 è stato installato alla 24.21.0 e npm alla 11.19.0. L’unico file di configurazione modificato dall’installazione è [/etc/dnf/modules.d/nodejs.module], che registra come attivi lo stream 24 e il profilo common.

4️⃣ Installare jsdom e controllare lo script di un pulsante

jsdom si installa con npm in una cartella di lavoro, che va creata fuori dalla web root.

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

[npm init -y] crea package.json con i valori predefiniti, poi jsdom viene installato nella stessa cartella.

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

Sono stati installati 36 pacchetti, compreso jsdom 30.1.3, con 0 vulnerabilità note. La cartella node_modules nella cartella di lavoro occupa 26M.

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

Se jsdom legge come documento un HTML fatto di un solo tag h1 e stampa il testo al suo interno, [Ciao], la verifica è conclusa.

Controllare lo script di un pulsante significa verificare sul server che il testo cambi correttamente dopo il clic. Come esempio ho creato nella cartella di lavoro un file HTML in cui, premendo il pulsante [Copia], il testo diventa [Copiato].

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

Lo script di controllo legge il file HTML con jsdom, esegue gli script e stampa il testo prima e dopo il clic. Gli errori dello script vengono stampati su righe che iniziano con [Errore:].

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

const vc = new VirtualConsole();
vc.on('jsdomError', (e) => console.log('Errore:', 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('Prima del clic:', btn.textContent);
btn.click();
console.log('Dopo il clic:', btn.textContent);
node check.js btn.html
Prima del clic: Copia
Dopo il clic: Copiato

Dopo il clic il testo diventa [Copiato], a conferma che lo script del pulsante funziona.

Basta un refuso nello script per cambiare il risultato. Ho eseguito lo stesso controllo su un file in cui la I maiuscola di getElementById era stata sostituita da una l minuscola.

sed 's/getElementById/getElementByld/' btn.html > btn-broken.html
node check.js btn-broken.html
Errore: Uncaught [TypeError: document.getElementByld is not a function]
Prima del clic: Copia
Dopo il clic: Copia

Sulla prima riga compare un errore e lo script si ferma, quindi il testo resta [Copia] anche dopo il clic.

Ho assegnato al pulsante con il CSS una larghezza di 120px e un’altezza di 40px e poi ne ho stampato le dimensioni.

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

jsdom non ha la fase di disegno sullo schermo, quindi altezza e larghezza vengono stampate come 0.

🔢 FAQ & contenuti consigliati

Nel registro npm i requisiti di jsdom 30.1.3 sono Node.js 22.22.2 o superiore, 24.15.0 o superiore, oppure 26 e successive, quindi gli stream 18 e 20 non rientrano nella condizione.

[which node] non mostra un node che non sia nel PATH. Sul server controllato [which node] non restituiva nulla, ma in una cartella utente c’era un Node.js 18.4.0 installato con il pacchetto pip nodejs-bin.

[d] indica il valore predefinito (default); se segue il profilo common, installando senza specificare un profilo viene installato il profilo common.

🧭 Contenuti consigliati sulla gestione dei pacchetti 9 articoli · 2 riferimenti
🗂️ Gestione dei pacchetti
📄 Comando yum 📄 Comando yum-config-manager 📄 Differenze tra RPM e YUM 📄 Comandi apt · apt-get 📄 Installare snapd
📄 Installare Node.js 📄 Installare Nginx · PHP su CentOS 7 📄 Installare phpMyAdmin 📄 Installare e configurare PHP-FPM
📡 DNF Module Command 📡 Node.js Previous Releases

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 5   +   7   =