Selama empat belas tahun pertamanya, JavaScript praktis hanya hidup di dalam browser. Pengembang yang sudah nyaman dengan bahasa ini tetap harus mempelajari bahasa lain ketika hendak menulis server atau alat otomasi. Situasi berubah pada 2009 ketika Node.js dirilis: engine V8 milik Chrome dipaketkan ulang agar JavaScript bisa dieksekusi langsung di sistem operasi, tanpa browser sama sekali.
Hari ini pilihannya bukan hanya satu. Ada Node.js, Deno, dan Bun — tiga runtime dengan karakter berbeda yang menjalankan bahasa yang sama. Siti, misalnya, menulis komponen antarmuka pada siang hari dan API server pada malam hari, semuanya dengan JavaScript di terminal yang sama. Chapter ini memetakan apa yang berubah ketika JavaScript keluar dari browser, lalu menuntun kita menulis program baris perintah pertama yang diuji langsung dengan Node.js 24.
Tiga Runtime Utama #
Runtime adalah program yang menjalankan kode kita dan menyediakan API tambahan di sekitarnya. Tiga nama berikut yang paling banyak dipakai saat ini:
| Runtime | Debut | Engine | Ciri khas |
|---|---|---|---|
| Node.js | 2009 | V8 | Ekosistem package terbesar (npm); versi 24 saat ini berstatus Active LTS |
| Deno | 2020 | V8 | Dibuat oleh pencipta Node.js; TypeScript dapat langsung dijalankan; izin akses diatur eksplisit |
| Bun | 2022 | JavaScriptCore | Fokus pada kecepatan; menyatukan runtime, package manager, bundler, dan test runner dalam satu alat |
Status LTS (Long Term Support) patut dicermati: versi LTS menerima perbaikan dalam jangka panjang sehingga layak untuk proyek serius, sementara versi terbaru (Current) membawa fitur paling segar. Node.js 24 menjadi Active LTS sejak Oktober 2025.
Lalu bagaimana memilih? Bagi pemula yang mengikuti Course ini, Node.js adalah titik mulai paling mulus: dokumentasinya melimpah, hampir semua tutorial kompatibel, dan alat pengembangan web umumnya menganggapnya hadir di mesin kita. Deno dan Bun tetap layak dipelajari di kemudian hari — keduanya bisa menjalankan banyak kode Node.js apa adanya, sehingga pengetahuan yang kita bangun di sini tidak hangus.
Apa yang Berubah Tanpa Browser #
Keluar dari browser, dua hal berubah sekaligus: sesuatu yang hilang dan sesuatu yang baru hadir. Yang hilang adalah API milik browser — document, window, dan localStorage tidak tersedia. Yang hadir adalah API sistem operasi: membaca dan menulis berkas, menerima argument dari baris perintah, membuka koneksi jaringan sebagai server, dan membaca variabel lingkungan (environment variable).
Tabel berikut membandingkan kemampuan di dua lingkungan:
| Kemampuan | Browser | Node.js |
|---|---|---|
Mengubah DOM lewat document | Ada | Tidak ada |
| Membaca dan menulis berkas | Tidak langsung | Ada lewat modul fs |
| Menerima argument baris perintah | Tidak relevan | Ada lewat process.argv |
| Membaca environment variable | Terbatas | Ada lewat process.env |
| Menjalankan server HTTP | Tidak (browser hanya klien) | Ada lewat modul bawaan |
fetch untuk jaringan | Ada | Ada (tersedia sejak Node.js 18) |
Contoh: Program CLI Pertama #
Alat baris perintah (CLI) adalah bentuk program di luar browser yang paling mudah kita coba. Program berikut menyapa pengguna; namanya diterima lewat argument yang diketik di terminal:
// sapa-cli.js — menyapa pengguna dari terminal
const nama = process.argv[2];
console.log(`Halo, ${nama}!`);
console.log(`Script ini berjalan pada ${process.version}`);Jalankan berkasnya dengan menyertakan argument Budi:
node sapa-cli.js BudiOutput yang Dihasilkan:
Halo, Budi!
Script ini berjalan pada v24.21.0Mari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 2 (
process.argv[2]): objectprocessadalah fitur bawaan Node.js yang menggambarkan proses yang sedang berjalan. Propertiargvmenyimpan daftar teks dari perintah yang diketik; indeks0berisinode, indeks1berisisapa-cli.js, dan indeks2berisi argument pertama dari kita — di sini"Budi". - **Baris 4 (
console.log(\Halo, ${nama}!`))**: template literal menyisipkan nilainamake dalam teks sapaan, menghasilkanHalo, Budi!`. - Baris 5 (
process.version): properti ini berisi string versi runtime yang sedang dipakai. Pada lingkungan uji Course ini nilainyav24.21.0; angka di mesin kita bisa berbeda bila versi Node.js-nya berbeda.
Program sesederhana ini sudah memperlihatkan pola khas aplikasi CLI: menerima masukan dari pengguna, memprosesnya, dan menampilkan keluaran kembali ke terminal.
Ada satu jebakan kecil yang layak dicatat: ketika program dijalankan tanpa argument (node sapa-cli.js), process.argv[2] bernilai undefined, dan keluaran kedua barisnya menjadi Halo, undefined!. Nilai undefined adalah tanda bahwa sesuatu belum diberi nilai — topik yang kita bedah tuntas pada section Values dan Types. Program CLI yang siap dipakai biasanya memeriksa argument terlebih dahulu sebelum menggunakannya.
Untuk Apa Saja JavaScript di Luar Browser #
Lingkup pemakaian runtime modern jauh melampaui skrip sapa-sapaan. Bayangkan Budi yang setiap pekan harus mengganti nama ratusan berkas laporan — tugas itu bisa diselesaikan sekali menulis skrip lalu dipanggil dari terminal kapan pun dibutuhkan. Beberapa kategori penggunaan yang paling umum:
- Web server dan API: menerima permintaan HTTP dari browser atau aplikasi lain, memprosesnya, dan mengembalikan respons — pekerjaan utama bagian belakang (backend) aplikasi modern.
- Tooling pengembangan: bundler, transpiler, linter, dan test runner — banyak yang ditulis dengan JavaScript sendiri dan dijalankan lewat Node.js. Setiap kali kita membangun proyek web modern, tooling inilah yang bekerja di balik layar.
- Alat CLI produktivitas: generator proyek, pemformat kode, hingga alat penerapan (deployment) yang dipanggil dari terminal.
- Aplikasi desktop: Electron memadukan Chromium dan Node.js sehingga antarmuka web bisa dikemas menjadi aplikasi desktop — contoh terkenalnya Visual Studio Code.
- Skrip otomasi: mengganti nama ratusan berkas, mengolah data kecil, atau menjadwalkan tugas rutin.
Pola yang menarik: semua runtime ini menjalankan bahasa yang sama, tetapi penerjemah dan API di sekelilingnya berbeda. Penerjemah itulah yang kita bongkar pada chapter berikutnya — JavaScript Engine.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
sapa-cli.js
Unduh berkas// sapa-cli.js — menyapa pengguna dari terminal
const nama = process.argv[2];
console.log(`Halo, ${nama}!`);
console.log(`Script ini berjalan pada ${process.version}`);