Episode ini membedah empat modul core yang paling sering dipakai: fs untuk sistem file, path untuk manipulasi jalur, os untuk informasi sistem, dan events untuk EventEmitter. Semua contoh dijalankan langsung tanpa install paket apa pun.

Salah satu kekuatan Node.js adalah modul core — pustaka bawaan yang siap pakai tanpa install apa pun. Dari puluhan modul yang tersedia, empat di antaranya menjadi pondasi hampir semua aplikasi backend: fs, path, os, dan events.
Episode 3 membedah keempat modul tersebut. Kalian akan melihat cara membaca dan menulis file dengan fs, menyusun jalur lintas platform dengan path, membaca informasi sistem dengan os, dan membangun komunikasi antar objek dengan events. Setelah episode ini, kalian tidak akan lagi bingung ketika melihat require("fs") di kode production.
Modul core dimuat persis seperti paket npm, hanya saja tanpa proses install. Ada dua sintaks yang berlaku: CommonJS dan ES Modules. Sintaks ES Modules akan kita bedah penuh di episode 4; untuk episode ini kita memakai CommonJS:
const fs = require("fs");
const path = require("path");
const os = require("os");
const { EventEmitter } = require("events");
console.log("Empat modul core berhasil dimuat");Pola const { EventEmitter } = require("events") adalah destructuring — hanya mengambil satu properti bernama dari modul. Ini pola umum untuk modul yang mengekspor banyak hal.
Modul fs (file system) adalah gerbang ke sistem file: membuat folder, membaca file, menulis file, hingga streaming data. Contoh paling sederhana:
const fs = require("fs");
fs.writeFileSync("catatan.txt", "Belajar Node.js");
const isi = fs.readFileSync("catatan.txt", "utf8");
console.log(isi);fs.writeFileSync("catatan.txt", "Belajar Node.js") membuat file lalu readFileSync membacanya kembali dengan encoding utf8. Akhiran Sync berarti versi blocking — aman untuk script, tapi di episode 5 kita akan beralih ke versi asynchronous yang lebih cocok untuk server.
Untuk melihat isi folder dan memeriksa keberadaan file:
const fs = require("fs");
const daftar = fs.readdirSync(".");
console.log(daftar);
console.log(fs.existsSync("catatan.txt"));fs.readdirSync(".") mengembalikan daftar file di folder saat ini, dan existsSync mengecek apakah sebuah path ada. Kedua fungsi ini sering dipakai untuk validasi sebelum operasi file.
Sistem operasi memakai pemisah jalur berbeda — Linux dan macOS memakai /, Windows memakai \. Modul path menghapus perbedaan ini sehingga kode kalian portabel:
const path = require("path");
console.log(path.join("src", "routes", "api.js"));
console.log(path.extname("server.js"));
console.log(path.basename("/app/src/server.js"));path.join("src", "routes", "api.js") menghasilkan src/routes/api.js di Linux dan src\routes\api.js di Windows. Sementara extname mengambil ekstensi file dan basename mengambil nama file dari sebuah path lengkap.
Saat kode berjalan, folder kerja bisa berbeda dari lokasi file. Gunakan __dirname dan path.resolve untuk selalu menunjuk lokasi yang benar:
const path = require("path");
console.log(__dirname);
console.log(path.resolve("src", "config.js"));__dirname berisi lokasi folder tempat file ini berada. Menggabungkannya dengan path.join adalah pola standar untuk membaca file aset, misalnya konfigurasi atau template, tanpa bergantung pada folder kerja terminal.
Modul os memberi akses ke informasi sistem operasi dan perangkat keras. Berguna untuk log startup, monitoring, dan skrip deployment:
const os = require("os");
console.log(os.platform());
console.log(os.cpus().length);
console.log(os.totalmem() / 1024 / 1024 / 1024);os.platform() mengembalikan nama sistem, os.cpus().length menghitung jumlah inti CPU — angka ini menentukan jumlah worker untuk clustering di episode 19 — dan totalmem melaporkan total RAM dalam byte yang kita konversi ke gigabyte.
Modul events menyediakan EventEmitter — pola pub/sub yang menjadi dasar banyak API Node.js, termasuk server HTTP dan stream. Kalian bisa mengirim dan mendengarkan event bernama:
const { EventEmitter } = require("events");
const emitter = new EventEmitter();
emitter.on("sapa", (nama) => {
console.log("Halo, " + nama);
});
emitter.emit("sapa", "Arman");emitter.on("sapa", (nama) => ...) mendaftarkan pendengar, lalu emitter.emit("sapa", "Arman") memicu event tersebut beserta argumennya. Bayangkan pola ini dipakai untuk memberi tahu komponen lain bahwa file selesai diunduh atau koneksi database tertutup.
Dalam satu aplikasi nyata, keempat modul sering bekerja sama: os melaporkan resource, path menyusun lokasi file log, fs menulis log, dan events memberi tahu modul lain bahwa log baru tersedia. Menguasai keempatnya berarti kalian menguasai 80 persen kebutuhan dasar backend Node.js.
Inti yang harus dibawa pulang:
fs mengelola file dan direktori; versi Sync cocok untuk script.path menyatukan jalur lintas platform dengan aman.__dirname dan path.resolve menghasilkan jalur absolut yang andal.os menyediakan data platform, CPU, dan memori.events menyediakan EventEmitter untuk komunikasi antar objek.Di episode 4 selanjutnya kita akan membahas modul CommonJS vs ES Modules — perbedaan require dan import, field "type": "module" di package.json, cara mencampur kedua sistem, serta praktik memilih format modul untuk project baru. Fondasi file I/O dan stream akan menunggu di episode 5.