Program yang baik tahu di lingkungan apa program tersebut berjalan. Alat CLI perlu tahu sistem operasinya untuk memilih perilaku yang tepat, laporan diagnostik butuh jumlah CPU dan memori, dan berkas teks yang ditukar antar komputer butuh akhir baris yang benar. Module node:os adalah sumber resmi semua informasi itu — jembatan langsung dari kode JavaScript kita ke sistem operasi di bawahnya. Chapter penutup Section ini membedah bagian-bagiannya yang paling sering dipakai, dengan catatan penting: nilai yang dilaporkan module ini mengikuti komputer tempat program berjalan.

Platform dan Arsitektur #

Dua pertanyaan pertama yang biasanya diajukan program lintas platform adalah “sistem operasinya apa?” dan “CPU-nya arsitektur apa?”. Function os.platform() dan os.arch() menjawab keduanya dalam satu panggilan, dan os.cpus() mengembalikan array berisi data tiap inti prosesor — panjang array itulah yang lazim dipakai untuk menghitung jumlah core. Berkas info-sistem.mjs merangkum ketiganya:

js
import os from "node:os";

console.log("platform    :", os.platform());
console.log("arsitektur  :", os.arch());
console.log("jumlah CPU  :", os.cpus().length);
console.log("EOL         :", JSON.stringify(os.EOL));

Output yang Dihasilkan:

text
platform    : linux
arsitektur  : x64
jumlah CPU  : 2
EOL         : "\n"

Nilai linux, x64, dan 2 pada output adalah kondisi komputer tempat contoh ini diuji. Nilai-nilai tersebut bukan konstanta — di komputer pembaca hasilnya bisa berbeda. Tabel berikut merangkum nilai yang paling sering dijumpai:

PropertyNilai umumSistem
os.platform()linuxSebagian besar server dan distribusi desktop Linux
os.platform()darwinmacOS
os.platform()win32Windows, termasuk versi 64-bit
os.arch()x64Prosesor Intel/AMD 64-bit
os.arch()arm64Apple Silicon dan ARM server

Perbandingan platform seperti itu biasanya menjadi kondisi if untuk memilih path bawaan, perintah sistem, atau akhir baris yang benar — persis pola yang dipakai tool-tool populer di npm. Kebalikannya, menulis cabang kode per platform untuk hal yang sudah ditangani module lain adalah pemborosan: node:path sudah menangani pemisah folder, jadi deteksi platform tinggal dipakai untuk kasus yang benar-benar spesifik sistem operasi.

Akhir Baris dengan os.EOL #

Berkas teks diakhiri karakter tak terlihat yang menandai baris baru, dan di sinilah sistem operasi tidak sepakat: Linux dan macOS memakai satu karakter \n, sedangkan Windows memakai dua karakter \r\n. Konstanta os.EOL menyimpan akhir baris yang benar untuk sistem operasi berjalan. Pada output info-sistem.mjs di atas, JSON.stringify(os.EOL) menampilkan "\n" karena contoh diuji di Linux — di Windows hasilnya "\r\n". Berkas baris-baris.mjs memakai konstanta tersebut untuk merakit laporan multi-baris:

js
import os from "node:os";

const laporan = ["Laporan Harian", "---------------", "Selesai"];

process.stdout.write(laporan.join(os.EOL) + os.EOL);

Output yang Dihasilkan:

text
Laporan Harian
---------------
Selesai

Baris 3 menyiapkan isi laporan sebagai array string tanpa perlu memikirkan akhir baris, dan baris 5 merangkainya dengan join(os.EOL) lalu menutup dengan satu os.EOL di ujung. Hasilnya identik dengan menulis "Laporan Harian\n---------------\nSelesai\n" secara manual, tetapi versi os.EOL otomatis benar bila kode yang sama dijalankan di Windows. Pola seperti ini penting saat menulis berkas konfigurasi atau berkas teks yang akan dibuka program lain di sistem operasi berbeda.

CPU, Memori, dan Lokasi Pengguna #

Tiga kelompok informasi lainnya melengkapi gambaran mesin. Untuk CPU, os.cpus().length memberi jumlah core — angka yang dipakai untuk menentukan berapa banyak pekerjaan paralel yang masuk akal, misalnya jumlah worker yang dibuat node:cluster. Untuk memori, os.freemem() dan os.totalmem() melaporkan byte yang tersedia dan total. Untuk lokasi, os.homedir() mengembalikan folder utama pengguna — titik awal alami menyimpan konfigurasi, misalnya path.join(os.homedir(), ".konfigurasi-aplikasi") — dan os.hostname() mengembalikan nama komputer.

Berbeda dengan platform dan EOL, angka memori berubah dari detik ke detik, dan homedir serta hostname berbeda di setiap komputer. Karena itu contoh untuk ketiganya tidak mencetak nilai mentahnya, melainkan memakainya sebagai dasar keputusan:

js Pola pemeriksaan memori sebelum tugas berat
import os from "node:os";

const BATAS_BYTE = 512 * 1024 * 1024; // setara 512 MB

if (os.freemem() < BATAS_BYTE) {
  console.error("Memori bebas terlalu kecil, tugas ditunda.");
} else {
  console.log("Memori cukup, tugas dijalankan.");
}

Pola if di atas adalah cara sehat memakai nilai yang berubah-ubah: program mengambil keputusan dari perbandingan, bukan mengandalkan angka pasti yang akan basi begitu dicetak. Nilai os.homedir() juga paling sering berperan sebagai basis path konfigurasi dan cache, bukan sebagai teks yang ditampilkan — pengguna tidak perlu diberi tahu lagi lokasi folder utamanya sendiri.

Dengan node:os, rangkaian enam core module pada Section ini lengkap: node:path untuk lokasi berkas, node:url untuk alamat web, node:util untuk perkakas harian, node:events untuk pola notifikasi, process untuk proses berjalan, dan node:os untuk mesin di bawahnya. Pengetahuan ini langsung terpakai pada Section berikutnya — module node:fs, tempat kita akhirnya benar-benar membaca dan menulis berkas dengan path yang sudah kita kuasai.

Referensi lanjutan untuk topik chapter ini: