Instal Node.js: Cek Fungsi Tombol di Server tanpa Browser

Pemberitahuan afiliasi Ver 3.1
Pemberitahuan afiliasi Ver 3.2 (khusus seluler)
Lingkungan ujiKeluarga RHELAlmaLinux 9.8akun rootDiperiksa 2026-10-19

Untuk menjalankan JavaScript di server, Node.js perlu diinstal terlebih dahulu. Node.js 24.21.0 diinstal di server WordPress dengan konfigurasi Nginx dan Apache, lalu skrip tombol di halaman web diperiksa tanpa browser menggunakan jsdom 30.1.3.

nodejs di repositori bawaan adalah versi 16.20.2, sedangkan jsdom 30.1.3 yang dipakai untuk memeriksa skrip memerlukan Node.js 22.22.2 atau lebih baru. Karena itu, instalasi dilakukan dari stream modul dnf 24.

1️⃣ Tujuan menginstal Node.js dan jsdom di server

Untuk memeriksa skrip tombol di server, diperlukan dua hal: Node.js dan jsdom.

🔲 Node.js

JavaScript biasanya berjalan di dalam browser, tetapi setelah Node.js diinstal, server juga dapat membaca dan menjalankan JavaScript.

Menginstal Node.js berarti menaruh satu mesin eksekusi JavaScript, yang sebelumnya hanya ada di dalam browser, di server juga. Karena itu, Node.js dipakai untuk membuat server web, membuat perintah yang memproses banyak file sekaligus, atau memuat paket seperti jsdom untuk memeriksa halaman. Ghost juga merupakan CMS yang berjalan di atas Node.js.

🔲 jsdom

jsdom adalah paket untuk Node.js yang membaca HTML dan mengubahnya menjadi dokumen yang tombolnya bisa ditekan seperti di browser. jsdom membangun struktur dokumen (DOM) yang dibuat browser saat membuka halaman, tetapi di dalam server tanpa layar, sehingga skrip menemukan tombol dan mengubah teks seolah-olah berada di browser sungguhan. Karena tidak membuka jendela, jsdom bisa dijalankan di server dengan satu baris perintah.

Artinya, pemeriksaan yang dulu dilakukan orang dengan membuka browser dan menekan semuanya satu per satu kini digantikan server dengan perintah. Karena itu, jsdom juga dipakai untuk menguji perilaku tombol secara otomatis setiap kali ada perbaikan, mengambil hanya konten seperti judul dan tautan dari halaman, atau menyunting HTML artikel sekaligus.

Jika halaman diambil dengan PHP atau curl, yang terlihat hanya HTML yang pertama kali dikirim. Teks yang berubah setelah tombol ditekan baru muncul setelah skrip dijalankan.

Browser melewati empat tahap: mengambil halaman, membaca halaman, menekan tombol, dan menampilkannya di layar. jsdom menjalankan semua tahap di server kecuali tahap menampilkan di layar, sehingga posisi dan ukuran tombol diperiksa di browser.

🧩 Yang dilakukan browser dan jsdom
Diagram penjelasan
🖥️ Yang menjalankan
Mengambil halamanMenerima HTML yang dikirim server
Membaca halamanMengenali apa ada di mana
Menekan tombolSkrip mengubah teks
Menampilkan di layarMenggambar posisi·ukuran·font
Perubahan teks ✓Galat ✓Posisi·ukuran ✓Posisi·ukuran ✗ (periksa di browser)
Browser menjalankan keempat tahap.
jsdom hanya menjalankan tiga tahap pertama di server.

2️⃣ Sebelum instalasi: repositori bawaan dan stream modul

Sebelum menjalankan [dnf install nodejs], periksa dulu versi yang akan diinstal. nodejs di repositori bawaan AlmaLinux 9.8 adalah 16.20.2.

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

Repositori modul memiliki empat stream: 18, 20, 22, dan 24. Per tanggal pemeriksaan, stream 22 berada di 22.23.2 dan stream 24 di 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

Menurut registri npm, versi yang diperlukan jsdom 30.1.3 adalah 22.22.2 ke atas untuk seri 22, 24.15.0 ke atas untuk seri 24, atau 26 ke atas. Stream 22 dan 24 sama-sama memenuhi syarat ini.

3️⃣ Instal Node.js: dnf module

Kali ini yang diinstal adalah stream 24, dan sebelum dijalankan, daftar paket yang akan diinstal diperiksa dulu dengan opsi [--assumeno].

dnf module install nodejs:24 --assumeno

Daftarnya hanya berisi lima paket: nodejs, npm, nodejs-libs, nodejs-docs, dan nodejs-full-i18n. Tidak ada paket server web, PHP, atau kernel. Setelah diperiksa, jalankan instalasi dengan opsi [-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] mencantumkan weak dependencies, yaitu paket yang sebaiknya ikut diinstal bersama. Ukuran unduhan 40M dan ukuran setelah terinstal 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 terinstal sebagai 24.21.0 dan npm sebagai 11.19.0. Satu-satunya file konfigurasi yang berubah setelah instalasi adalah [/etc/dnf/modules.d/nodejs.module], yang mencatat stream 24 dan profil common sebagai aktif.

4️⃣ Instalasi jsdom dan pemeriksaan skrip tombol

jsdom diinstal dengan npm ke folder kerja, dan folder kerja dibuat di luar web root.

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

[npm init -y] membuat package.json dengan nilai bawaan, lalu jsdom diinstal ke folder yang sama.

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 paket termasuk jsdom 30.1.3 terinstal, dengan 0 kerentanan yang diketahui. Ukuran node_modules di folder kerja adalah 26M.

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

Jika jsdom membaca HTML berisi satu tag h1 sebagai dokumen lalu mencetak teks di dalamnya, [Halo], pemeriksaan selesai.

Pemeriksaan skrip tombol berarti memastikan di server bahwa teks berubah dengan benar setelah tombol ditekan. Sebagai contoh, dibuat file HTML di folder kerja yang teks tombol [Salin]-nya berubah menjadi [Tersalin] saat ditekan.

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

Skrip pemeriksa membaca file HTML dengan jsdom, menjalankan skripnya, lalu mencetak teks sebelum dan sesudah tombol ditekan. Galat skrip dicetak pada baris yang diawali [Galat:].

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

const vc = new VirtualConsole();
vc.on('jsdomError', (e) => console.log('Galat:', 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('Sebelum klik:', btn.textContent);
btn.click();
console.log('Setelah klik:', btn.textContent);
node check.js btn.html
Sebelum klik: Salin
Setelah klik: Tersalin

Setelah diklik, teks berubah menjadi [Tersalin], yang memastikan skrip tombol berfungsi.

Satu salah ketik di skrip saja sudah mengubah hasilnya. Pemeriksaan yang sama dijalankan pada file yang huruf kapital I pada getElementById diganti dengan huruf kecil l.

sed 's/getElementById/getElementByld/' btn.html > btn-broken.html
node check.js btn-broken.html
Galat: Uncaught [TypeError: document.getElementByld is not a function]
Sebelum klik: Salin
Setelah klik: Salin

Galat dicetak di baris pertama dan skrip berhenti, sehingga teks tetap [Salin] meski tombol diklik.

Tombol diberi lebar 120px dan tinggi 40px dengan CSS, lalu ukurannya dicetak.

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

jsdom tidak punya tahap menggambar di layar, sehingga tinggi dan lebar dicetak sebagai 0.

🔢 FAQ & Konten yang Direkomendasikan

Versi yang diperlukan jsdom 30.1.3 menurut registri npm adalah Node.js 22.22.2 ke atas, 24.15.0 ke atas, atau 26 ke atas, sehingga stream 18 dan 20 tidak memenuhi syarat ini.

node yang tidak ada di PATH tidak muncul di [which node]. Di server yang diperiksa, [which node] juga tidak menampilkan hasil, tetapi ada Node.js 18.4.0 yang terinstal lewat paket pip nodejs-bin di dalam folder pengguna.

[d] adalah tanda nilai bawaan (default); jika ada di belakang profil common, profil common yang diinstal saat instalasi dilakukan tanpa menyebut profil.

🧭 Konten manajemen paket yang direkomendasikan 9 artikel · 2 referensi
🗂️ Manajemen paket
📄 Perintah yum 📄 Perintah yum-config-manager 📄 Perbedaan RPM · YUM 📄 Perintah apt · apt-get 📄 Instalasi snapd
📄 Instal Node.js 📄 Instalasi Nginx · PHP di CentOS 7 📄 Instalasi phpMyAdmin 📄 Instalasi dan konfigurasi PHP-FPM
📡 DNF Module Command 📡 Node.js Previous Releases

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 5   +   5   =