os, process, env

Informasi platform, argv, dan konfigurasi lingkungan melalui process.env.

Daftar isi

Modul os dan objek global process adalah gerbang Node menuju informasi sistem operasi serta eksekusi proses saat ini. Modul os menyediakan metadata tentang mesin tempat Node berjalan, sedangkan process menyediakan metadata tentang proses itu sendiri, argumen baris perintah, dan variabel lingkungan. Setelah membaca topik ini, pembaca dapat membaca karakteristik platform, mengambil argumen baris perintah, serta membaca dan menulis variabel lingkungan melalui process.env.

Modul os#

Modul os menyediakan fungsi yang mengembalikan metadata sistem operasi. Fungsi os.platform() mengembalikan nama platform seperti linux atau darwin, sedangkan os.arch() mengembalikan arsitektur prosesor seperti x64 atau arm64. Fungsi os.type() mengembalikan nama sistem operasi umum, dan os.release() mengembalikan versi kernel. Untuk penggunaan praktis, properti process.platform juga tersedia secara langsung tanpa memanggil os.

Beberapa fungsi os yang sering dipakai pada kode yang harus sadar platform adalah os.EOL untuk karakter akhir baris yang sesuai sistem operasi, os.homedir() untuk direktori rumah pengguna, dan os.tmpdir() untuk direktori berkas sementara. Fungsi os.cpus() mengembalikan larik objek yang menggambarkan setiap inti CPU, sehingga os.cpus().length memberikan jumlah inti. Jumlah inti ini berguna untuk menentukan ukuran kumpulan thread pekerja (pool worker) pada tugas paralel. Fungsi os.freemem() dan os.totalmem() memberikan informasi memori, tetapi nilainya berfluktuasi sehingga hanya cocok untuk pemantauan, bukan untuk pengambilan keputusan yang menentukan alur program.

js os-info.js
const os = require('node:os');

console.log('platform:', process.platform);
console.log('arsitektur:', os.arch());
console.log('tipe:', os.type());
console.log('jumlah CPU:', os.cpus().length);
console.log('EOL:', JSON.stringify(os.EOL));
text Keluaran
platform: linux
arsitektur: x64
tipe: Linux
jumlah CPU: 2
EOL: "\n"

Keluaran di atas diambil pada sistem operasi Linux dengan arsitektur x64 dan dua inti CPU. Pada mesin Windows atau macOS, process.platform berubah menjadi win32 atau darwin, os.type() menjadi Windows_NT atau Darwin, dan os.EOL menjadi "\r\n" atau "\n". Perbedaan ini menjelaskan mengapa kode yang menggabungkan akhir baris secara manual rentan rusak lintas platform, sedangkan kode yang memakai os.EOL tetap konsisten.

process dan argv#

Objek process bersifat global dan menyediakan informasi serta kendali atas proses Node yang berjalan. Properti process.platform sudah disinggung di atas, sedangkan properti lain yang sering dipakai adalah process.version untuk versi Node, process.pid untuk ID proses, dan process.cwd() untuk direktori kerja saat ini. Properti process.argv adalah larik argumen baris perintah: indeks 0 berisi jalur biner Node, indeks 1 berisi jalur skrip yang dijalankan, dan indeks 2 ke atas berisi argumen yang diberikan pengguna.

js argv-demo.js
const path = require('node:path');

console.log('panjang argv:', process.argv.length);
console.log('biner node:', path.basename(process.argv[0]));
console.log('argumen pengguna:', process.argv.slice(2));
text Keluaran
panjang argv: 2
biner node: node
argumen pengguna: []

Keluaran di atas dihasilkan ketika skrip dijalankan tanpa argumen tambahan, sehingga process.argv hanya berisi biner Node dan jalur skrip. Untuk memeriksa perilaku dengan argumen, jalankan skrip yang sama dengan argumen posisional.

bash
# jalankan dengan satu argumen posisional
node argv-demo.js citra
text Keluaran
panjang argv: 3
biner node: node
argumen pengguna: [ 'citra' ]

Ketika argumen citra ditambahkan, process.argv.slice(2) mengembalikan larik berisi satu string tersebut. Pola lazim untuk membaca argumen baris perintah tanpa paket eksternal adalah memproses process.argv.slice(2) secara manual atau memakai util.parseArgs yang tersedia sejak Node 18.3. Untuk opsi berbentuk --nama=nilai, util.parseArgs lebih disarankan karena menangani sintaks standar dan memberikan pesan error yang konsisten.

process.env#

Properti process.env adalah objek yang berisi seluruh variabel lingkungan tempat proses berjalan. Nilainya selalu bertipe string, sehingga angka dan boolean perlu dikonversi secara eksplisit. Variabel lingkungan adalah sarana konfigurasi utama yang memisahkan nilai dari kode sumber, terutama untuk nilai yang berbeda per lingkungan seperti porta server, tingkat log, dan string koneksi basis data.

Penulisan ke process.env mengubah nilai pada objek tersebut untuk proses saat ini dan proses anak yang dibangkitkan kemudian, tetapi tidak mengubah lingkungan proses induk atau sistem operasi secara permanen. Pemakaian delete process.env.NAMA menghapus variabel dari objek, dan pemanggilan process.env.TIDAK_ADA mengembalikan undefined.

js env-demo.js
process.env.PORT = '8080';
process.env.NODE_ENV = 'development';

console.log('PORT:', process.env.PORT);
console.log('NODE_ENV:', process.env.NODE_ENV);
console.log('PORT numerik:', Number(process.env.PORT));
console.log('mode produksi?', process.env.NODE_ENV === 'production');
text Keluaran
PORT: 8080
NODE_ENV: development
PORT numerik: 8080
mode produksi? false

Konversi Number(process.env.PORT) menghasilkan angka karena variabel lingkungan selalu string, sedangkan pembandingan process.env.NODE_ENV === 'production' mengembalikan false karena nilainya development. Pola kedua adalah cara standar untuk memilih cabang logika berdasarkan lingkungan eksekusi. Variabel yang sama dapat dipasok dari luar tanpa mengubah kode, misalnya PORT=3000 NODE_ENV=production node env-demo.js, sehingga konfigurasi terpisah dari kode dan tidak ada nilai yang ditanam secara permanen di berkas sumber.

stdin, stdout, dan keluar proses#

Objek process juga menyediakan tiga stream standar: process.stdin untuk masukan, process.stdout untuk keluaran normal, dan process.stderr untuk keluaran error. Stream stdout dan stderr bersifat sinkron ketika menulis ke terminal, sehingga console.log dan console.error aman dipakai tanpa khawatir urutan keluaran berubah. Pada pipa atau berkas, kedua stream ini menjadi asinkron dan menggunakan buffer internal.

Metode process.exit(code) menghentikan proses segera dengan kode keluar yang diberikan. Kode keluar 0 berarti sukses, sedangkan kode selain 0 berarti error. Pemanggilan process.exit tanpa argumen memakai kode 0. Pada server yang menjalankan koneksi aktif, pemanggilan process.exit secara mendadak dapat memutus permintaan yang sedang berjalan, sehingga pola graceful shutdown lebih disarankan: tutup server terlebih dahulu, tunggu permintaan selesai, lalu panggil process.exit. Untuk pemberitahuan penutupan dari luar, peristiwa SIGINT dan SIGTERM dapat ditangkap dengan process.on('SIGTERM', handler).

Ringkasan#

  • Modul os menyediakan metadata platform: os.platform, os.arch, os.type, os.cpus, dan os.EOL untuk akhir baris yang sadar sistem operasi.
  • process.argv berisi biner Node pada indeks 0, jalur skrip pada indeks 1, dan argumen pengguna dari indeks 2 ke atas, sehingga slice(2) memberikan argumen pengguna.
  • process.env menyimpan variabel lingkungan sebagai string, memerlukan konversi eksplisit untuk angka dan boolean, dan dapat ditulis serta dihapus pada proses saat ini.
  • Konfigurasi yang berbeda per lingkungan sebaiknya dipasok melalui variabel lingkungan alih-alih ditanam di kode sumber.

Referensi#

  • OS — Node.js — Referensi resmi modul os beserta daftar fungsi platform, CPU, dan memori.
  • Process — Node.js — Referensi resmi objek process, mencakup argv, env, platform, dan cwd.