Menu

Runtime Node.js: Cara JavaScript Berjalan di Luar Browser

Apa itu runtime Node.js, perbedaannya dengan browser, dan API inti seperti global, module, process, dan fs yang memungkinkan JavaScript di sisi server.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Apa Sebenarnya Node Itu

Node.js adalah program yang kamu instal di komputer untuk menjalankan file JavaScript. Itulah deskripsi paling sederhana, dan memang akurat. Saat kamu mengetik node script.js, Node membaca file-nya, menyerahkannya ke engine V8 milik Google (engine JavaScript dari Chrome), lalu menjalankannya, dengan perpustakaan besar berisi API tambahan untuk hal-hal yang tidak bisa dilakukan V8 sendiri.

V8 tahu cara menjalankan JavaScript. Ia tidak tahu cara membuka file, mendengarkan socket TCP, menjalankan proses, atau membaca environment variable. Node menyediakan semua itu, ditulis dalam C++, dan menyediakannya untuk JavaScript-mu sebagai module bawaan.

node --version
node script.js

Jadi Node bukan bahasa. Bukan juga framework. Node adalah runtime: V8 ditambah standard library, sistem module, dan event loop. Itu saja.

Script Pertama

File .js apa pun adalah program Node yang valid. Tanpa boilerplate, tanpa fungsi main:

console.log bekerja sama seperti di browser. Template literal, Date, array, promise: semua fitur bahasa yang sudah kamu kenal berasal dari V8 dan berperilaku sama persis. Yang berubah di Node adalah apa yang tersedia di sekitar bahasanya.

Global yang Hanya Ada di Node

Browser punya window, document, localStorage, fetch. Node punya kumpulan global yang berbeda, dirancang untuk runtime di sisi server:

  • process adalah proses Node yang sedang berjalan. Ia membawa environment variable (process.env), argumen command-line (process.argv), dan method untuk keluar (process.exit(1)).
  • __filename dan __dirname memberimu path absolut file saat ini dan folder-nya. (Di ES modules keduanya tidak ada; kamu memakai import.meta.url sebagai gantinya.)
  • global adalah objek tingkat atas, padanan window di Node.

Tidak ada document dan tidak ada window. Kalau kamu mencoba memakainya, kamu akan mendapat ReferenceError. Biasanya itulah petunjuk pertama bahwa sebuah library ditulis untuk browser dan tidak akan jalan di Node apa adanya.

Argumen Command-Line dan Environment

Sebagian besar kegunaan Node, seperti CLI, build script, dan server, butuh membaca argumen dan environment variable. Keduanya ada di process:

process.argv adalah array: dua entri pertamanya adalah path binary Node dan path script, jadi argumen sebenarnya dimulai dari index 2. process.env adalah objek biasa berisi environment variable. Membaca NODE_ENV, PORT, atau API key darinya adalah praktik standar.

Module Bawaan

Node dilengkapi standard library yang diakses lewat require (CommonJS) atau import (ESM). Nama module-nya diawali node: agar jelas bahwa module itu bawaan:

Yang paling sering akan kamu pakai:

  • node:fs: membaca dan menulis file. Pakai node:fs/promises untuk versi async/await.
  • node:path: menggabungkan, menyelesaikan, dan mem-parsing path file dengan cara yang lintas platform.
  • node:http / node:https: membangun server HTTP dan membuat request.
  • node:url: mem-parsing dan menyusun URL.
  • node:os: informasi tentang mesin host.
  • node:crypto: hashing, byte acak, dan enkripsi.

Kamu tidak perlu menginstalnya. Semuanya sudah ikut bersama Node. Semua yang lain berasal dari npm.

Sekilas tentang Event Loop

Node menjalankan JavaScript-mu di satu thread, tetapi menangani banyak hal sekaligus. Triknya adalah event loop. Saat kamu memanggil sesuatu yang async, seperti membaca file, request HTTP, atau timer, Node menyerahkan pekerjaan sebenarnya ke OS (atau ke thread pool-nya) dan terus mengeksekusi kode. Saat pekerjaan itu selesai, sebuah callback diantrekan, dan loop mengambilnya setelah kode saat ini selesai.

Urutan yang tercetak adalah 1, 4, 2, 3. Kode synchronous berjalan lebih dulu. Lalu microtask (promise yang sudah selesai). Lalu timer. Itulah sebabnya loop berat yang memakan CPU memblokir seluruh server-mu: hanya ada satu thread untuk kode milikmu. Konkurensi Node adalah soal I/O, bukan komputasi.

Server HTTP Mungil

Hasil dari semua ini adalah server web yang berfungsi muat dalam beberapa baris:

Tanpa framework, tanpa dependensi. createServer menerima fungsi yang berjalan di setiap request; listen membuat event loop mulai memproses koneksi yang masuk. Aplikasi sungguhan memakai Express atau Fastify di atasnya, tetapi di baliknya tetap module http bawaan yang sama.

Node vs Browser

Ada baiknya dijelaskan secara eksplisit apa yang terbawa dan apa yang tidak:

Berfungsi di keduanyaHanya NodeHanya browser
Fitur bahasa (class, promise, async/await)fs, http, process, __dirnamewindow, document, DOM
console.logrequire CommonJS / keanehan ESM khas NodelocalStorage, sessionStorage
fetch (Node 18+)Akses ke file system dan socket jaringanEvent pengguna, rendering
setTimeout, setIntervalChild process, streamHistory API, navigator

Node modern sudah mengadopsi beberapa API browser, seperti fetch, URL, AbortController, dan structuredClone, jadi jaraknya lebih sempit daripada dulu. Tetapi DOM tidak akan datang ke Node, dan file system tidak akan datang ke browser.

Node vs Deno vs Bun

Node adalah pilihan default, tetapi bukan lagi satu-satunya runtime JavaScript. Deno dan Bun adalah alternatifnya: Deno dari pencipta asli Node, Bun dari tim yang lebih baru dan berfokus pada kecepatan. Keduanya menjalankan JavaScript (dan TypeScript, secara native), membawa tooling bawaan seperti test runner dan bundler, dan berbeda dari Node dalam cara menangani module, izin, dan instalasi package.

Untuk belajar JavaScript, Node tetap tempat dokumentasi, tutorial, dan lowongan kerja berada. Konsepnya, seperti event loop, module, dan API bawaan, hampir sepenuhnya bisa dipakai di runtime lain. Pelajari Node lebih dulu; pelajari yang lain saat sebuah proyek membutuhkannya.

Menjalankan Script dengan Cepat

Beberapa cara untuk benar-benar menjalankan kode saat kamu bekerja:

# Run a file
node script.js

# Run a one-liner
node -e "console.log(2 ** 10)"

# Open the REPL (interactive prompt)
node

# Watch a file and re-run on save (Node 18.11+)
node --watch script.js

REPL adalah tempat coret-coret yang praktis saat kamu ingin mengecek apa yang dikembalikan sebuah method tanpa membuat file. --watch berguna selama development: simpan file-nya, dan Node otomatis menjalankan ulang script-mu.

Berikutnya: Menangkap Error

Menjalankan kode adalah satu hal; menanganinya saat ada yang salah adalah hal lain. Pembacaan file gagal, request HTTP kehabisan waktu, parsing JSON melempar error. Bab berikutnya membahas try/catch, jenis error, dan pola untuk menangani hal-hal yang rusak, yang dalam program Node, cepat atau lambat, akan terjadi pada segalanya.

Pertanyaan yang sering diajukan

Apa itu runtime Node.js?

Node.js adalah program yang menjalankan JavaScript di luar browser. Ia menggabungkan engine V8 milik Google (yang sama dengan yang menjalankan JS di Chrome) dengan lapisan C++ yang menyediakan API yang tidak dimiliki V8 sendiri, seperti akses file system, jaringan, proses, dan timer. Kombinasi itulah yang memungkinkanmu membangun server, CLI, dan build tool dengan JavaScript.

Apa bedanya Node dengan browser?

Keduanya menjalankan JavaScript, tetapi API di sekitar bahasanya berbeda. Browser memberimu window, document, dan DOM. Node memberimu process, fs, http, __dirname, dan pemuatan module CommonJS/ESM. Tidak ada DOM di Node dan tidak ada file system di browser: bahasanya sama, platformnya berbeda.

Apakah Node.js itu framework atau runtime?

Runtime. Node sendiri tidak memaksakan struktur aplikasi apa pun: ia hanya menjalankan JavaScript dan menyediakan API. Framework seperti Express, Next.js, atau NestJS dibangun di atas Node. Deno dan Bun adalah runtime JavaScript alternatif yang bersaing dengan Node tetapi memainkan peran yang sama.

Apa itu event loop di Node?

Event loop adalah yang memungkinkan Node menangani banyak hal sekaligus di satu thread. Saat kamu memanggil sesuatu yang async, seperti membaca file, request HTTP, atau setTimeout, Node menyerahkan pekerjaannya ke sistem dan terus berjalan. Saat pekerjaan itu selesai, callback-nya diantrekan dan event loop mengambilnya. Itulah sebabnya fs.readFile tidak memblokir sisa programmu.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai