Built-in Modules: fs, path, os — Node.js

Node.js menyediakan banyak built-in modules yang tidak perlu diinstall. Tiga yang paling sering dipakai: fs, path, dan os. fs — File System Ada 3 varian untuk h

Node.js menyediakan banyak built-in modules yang tidak perlu diinstall. Tiga yang paling sering dipakai: fs, path, dan os.

fs — File System

Ada 3 varian untuk hampir semua operasi fs:

1. Callback (cara lama, masih banyak di kode legacy):

import fs from "fs";

fs.readFile("data.txt", "utf-8", (err, data) => {
  if (err) return console.error(err);
  console.log(data);
});

2. Promise — fs.promises (recommended untuk kode modern):

import { readFile } from "fs/promises";

const data = await readFile("data.txt", "utf-8");
console.log(data);

3. Sync — fs.readFileSync (MEMBLOKIR event loop):

import { readFileSync } from "fs";

const data = readFileSync("data.txt", "utf-8"); // blocking!
console.log(data);

Kapan sync OK?

Kapan sync JANGAN dipakai?

path — Cross-platform path manipulation

Windows pakai \, Linux/Mac pakai /. Module path menangani ini untukmu.

import path from "path";

// JANGAN concat string sendiri — akan rusak di Windows
const badPath = "uploads" + "/" + "foto.jpg"; // hati-hati

// AMAN — path.join menyesuaikan separator OS
const goodPath = path.join("uploads", "foto.jpg");
// Linux: "uploads/foto.jpg"
// Windows: "uploads\foto.jpg"

// path.resolve → absolute path
path.resolve("src", "app.js"); // "/Users/budi/proj/src/app.js"

// Ekstraksi bagian path
path.extname("foto.jpg");   // ".jpg"
path.basename("/a/b/c.txt"); // "c.txt"
path.dirname("/a/b/c.txt");  // "/a/b"

os — Informasi sistem operasi

import os from "os";

os.platform();  // "darwin" (Mac), "linux", "win32"
os.cpus().length; // jumlah CPU core → berguna untuk clustering
os.tmpdir();    // folder temp OS, misal "/tmp"
os.homedir();   // "/Users/budi"
os.totalmem();  // RAM total (bytes)

__dirname / __filename vs ESM

CommonJS punya dua variabel global:

console.log(__dirname);  // folder file ini
console.log(__filename); // path lengkap file ini

ES Modules tidak punya ini — harus pakai import.meta.url:

import { fileURLToPath } from "url";
import path from "path";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

Contoh realistis

import { readFile, writeFile } from "fs/promises";
import path from "path";

async function uppercaseFile(input, output) {
  const content = await readFile(input, "utf-8");
  const upper = content.toUpperCase();
  const outPath = path.join(path.dirname(input), output);
  await writeFile(outPath, upper);
}

Yang akan kamu pelajari