Setelah Node.js terpasang, kode JavaScript dapat dijalankan langsung dari command line. Topik ini membahas tiga cara utama menjalankan kode: melalui berkas .js, lewat opsi node -e dan node -p, serta melalui REPL interaktif. Sebuah program pertama berupa kalkulator baris perintah juga dibuat untuk merangkum pola pemakaian process.argv dan process.exit.
Menjalankan berkas dengan node#
Cara paling lazim menjalankan kode Node.js adalah menyimpan kode ke dalam berkas dengan ekstensi .js, lalu memanggilnya lewat perintah node. Buat berkas berikut pada direktori kerja.
console.log("Halo, dunia!");Halo, dunia!Perintah node halo.js membaca berkas, mengompilasi isinya lewat V8, lalu mengeksekusi skrip pada satu thread utama. Setelah seluruh kode sinkron selesai dan tidak ada timer maupun operasi I/O tertunda, proses Node keluar dengan kode 0. Bila skrip memanggil process.exit(1) atau melempar error yang tidak tertangkap, proses keluar dengan kode bukan nol dan shell biasanya menampilkannya.
Opsi -e dan -p untuk kode sebaris#
Untuk kode yang sangat pendek, Node.js menyediakan dua opsi command line. Opsi -e (atau --eval) mengevaluasi sebuah string sebagai kode JavaScript, dan output apa pun yang dihasilkan oleh console.log dicetak ke stdout. Opsi -p (atau --print) juga mengevaluasi sebuah string, tetapi mencetak hasil ekspresi terakhir ke stdout tanpa perlu console.log.
node -e "console.log(1 + 2)"
node -p "1 + 2"3
3Kedua opsi cocok untuk pemeriksaan cepat seperti memeriksa nilai properti process.versions.v8 atau menghitung hasil ekspresi sederhana. Hindari memakai -e untuk kode yang lebih dari beberapa baris karena kutipan dan pelolosan karakter pada shell menjadi rumit. Pindahkan kode ke berkas .js begitu kompleksitasnya bertambah.
REPL Node.js#
REPL (Read-Eval-Print Loop) adalah mode interaktif yang membaca ekspresi dari stdin, mengevaluasinya, mencetak hasilnya, lalu kembali menunggu masukan berikutnya. REPL diaktifkan dengan menjalankan node tanpa argumen. Karena REPL bersifat interaktif dan memerlukan terminal, perintah berikut hanya ditampilkan sebagai rujukan dan tidak dieksekusi oleh verifikator.
# tidak-dijalankan
nodePada sesi REPL, ekspresi seperti 1 + 2 langsung dicetak hasilnya tanpa perlu console.log. REPL juga menyimpan hasil ekspresi terakhir pada variabel _. Beberapa perintah diawali dengan titik di dalam REPL. Perintah .help mencantumkan seluruh perintah REPL, .save nama.js menyimpan riwayat sesi ke sebuah berkas, .load nama.js mengevaluasi berkas baris demi baris seolah diketik manual, dan .exit keluar dari REPL.
REPL berguna untuk eksplorasi API Node.js (misalnya mencoba path.join atau crypto.randomUUID tanpa membuat berkas), menguji cuplikan kode sebelum menulisnya ke berkas, dan melakukan inspeksi cepat nilai objek. Untuk tugas yang berulang atau perlu disimpan, pindahkan ke berkas .js agar dapat dipanggil ulang.
Program pertama#
Sebagai rangkuman, buat sebuah kalkulator baris perintah sederhana yang menerima argumen operasi dan dua angka dari process.argv. Argumen baris perintah tersedia pada process.argv sebagai array, dengan dua elemen pertama adalah jalur executable node dan jalur berkas skrip. Sisa elemen mulai dari indeks dua adalah argumen yang diketik pengguna.
const args = process.argv.slice(2);
const operasi = args[0];
const a = Number(args[1]);
const b = Number(args[2]);
if (!operasi) {
console.log("Penggunaan: node kalkulator.js <tambah|kurang|kali|bagi> <a> <b>");
console.log("Contoh: node kalkulator.js tambah 7 5");
process.exit(0);
}
if (Number.isNaN(a) || Number.isNaN(b)) {
console.error("Argumen a dan b harus berupa angka");
process.exit(1);
}
let hasil;
switch (operasi) {
case "tambah": hasil = a + b; break;
case "kurang": hasil = a - b; break;
case "kali": hasil = a * b; break;
case "bagi": hasil = b === 0 ? "tidak terdefinisi" : a / b; break;
default: console.error("Operasi tidak dikenal: " + operasi); process.exit(2);
}
console.log(hasil);Bila kalkulator dipanggil tanpa argumen, skrip mencetak pesan penggunaan ke stdout dan keluar dengan kode 0. Keluaran ini dihasilkan oleh verifikator saat menjalankan berkas secara mandiri.
Penggunaan: node kalkulator.js <tambah|kurang|kali|bagi> <a> <b>
Contoh: node kalkulator.js tambah 7 5Operasi tambah menjumlahkan, sedangkan bagi membagi dan mengembalikan nilai pecahan apa adanya dari JavaScript. Jalankan kalkulator dengan dua argumen numerik berikut.
node kalkulator.js tambah 7 5
node kalkulator.js bagi 10 412
2.5Validasi argumen di awal skrip memastikan program keluar dengan pesan jelas bila argumen tidak dikenali. Bila operasi yang diketik tidak termasuk dalam daftar tambah, kurang, kali, dan bagi, skrip mencetak pesan ke stderr dan keluar dengan kode 2.
node kalkulator.js bagiku 1 2Operasi tidak dikenal: bagikuBila argumen numerik tidak dapat dikonversi menjadi bilangan, skrip mencetak pesan berbeda dan keluar dengan kode 1. Pemisahan kode keluar 1 (argumen tidak valid) dan 2 (operasi tidak dikenal) memudahkan shell script lain untuk membedakan jenis kesalahan.
Kesalahan umum#
Menyimpan berkas dengan ekstensi selain .js dan mengharapkan Node.js memuatnya lewat node berkas. Node.js memuat berkas dengan ekstensi .js, .mjs (modul ES eksplisit), dan .cjs (modul CommonJS eksplisit), tetapi ekstensi lain akan memicu error ERR_UNKNOWN_FILE_EXTENSION. Konsistenkan ekstensi .js untuk skrip biasa, .mjs bila modul ES diperlukan secara eksplisit, dan .cjs bila modul CommonJS harus dipaksakan pada proyek ESM.
Menganggap node -p dan node -e dapat dipakai bergantian. node -p mengevaluasi ekspresi terakhir dan mencetak hasilnya, sehingga cocok untuk ekspresi tunggal. node -e mengevaluasi seluruh kode sebagai skrip dan tidak mencetak apa pun kecuali ada console.log. Pemakaian node -p "console.log(1)" akan mencetak undefined karena nilai kembalian console.log adalah undefined, bukan hasil ekspresi yang diinginkan.
Lupa menangani error pada kode yang memakai operasi asinkron. Pada topik ini, contoh kalkulator bersifat sinkron sehingga error langsung tertangani oleh percabangan dan process.exit. Pada kode yang memakai callback atau promise, error yang tidak ditangkap akan membuat proses keluar dengan kode 1 dan pesan stack trace, meskipun kode tampak berjalan normal sebelumnya. Tangkap error lewat try/catch pada async/await, atau periksa argumen pertama callback sesuai konvensi Node.js ((err, result) => ...).
Ringkasan#
- Berkas
.jsdijalankan dengannode berkas.js, dan proses keluar dengan kode0bila seluruh kode sinkron selesai tanpa error. - Opsi
node -emengevaluasi string kode dan bergantung padaconsole.loguntuk mencetak, sedangkannode -pmengevaluasi dan langsung mencetak hasil ekspresi terakhir. - REPL diaktifkan dengan
nodetanpa argumen, mendukung perintah diawali titik (.help,.save,.load,.exit), dan menyimpan hasil terakhir pada variabel_. process.argvmenyimpan argumen baris perintah, dengan dua elemen pertama adalah jalurnodedan jalur berkas skrip, sehingga argumen pengguna dimulai pada indeks dua.process.exit(n)mengakhiri proses dengan koden.
Referensi#
- Command-line options — Node.js
— Daftar lengkap opsi command line
nodetermasuk-e,-p, dan--eval. - REPL — Node.js — Dokumentasi resmi modul REPL beserta daftar perintah titik.
- process.argv — Node.js
— Spesifikasi array
process.argvdan urutan elemennya.