Bab 3 dari 7 · 25 menit

Sistem Modul dan Ekosistem NPM

Modularitas adalah kunci menjaga keterbacaan kode aplikasi Node.js. Setiap berkas di Node.js diperlakukan sebagai modul terpisah dengan cakupan variabel yang terisolasi. Variabel di dalam satu berkas tidak akan bocor ke berkas lain kecuali diekspor secara eksplisit.

Sistem Modul Node.js

Node.js mendukung dua standar sistem modul:

  1. CommonJS (CJS): Sistem klasik Node.js yang menggunakan fungsi require() untuk mengimpor dan objek module.exports untuk mengekspor. Modul CJS dimuat secara sinkron pada saat runtime.
  2. ES Modules (ESM): Standar modern resmi JavaScript yang menggunakan sintaks import dan export. ESM dianalisis secara statis sebelum kode dijalankan dan dimuat secara asinkron.

CommonJS vs ESM

Untuk mengaktifkan ES Modules secara menyeluruh pada ekstensi .js, kamu cukup menambahkan properti "type": "module" di dalam berkas package.json. Node.js juga menyediakan beragam modul bawaan (core modules) seperti fs, path, http, os, events, stream, crypto, dan url. Sangat dianjurkan memanggil modul bawaan dengan prefiks eksplisit node:, misalnya require('node:path'), guna menghindari tabrakan penamaan dengan paket pihak ketiga dari registry NPM.

Semantic Versioning

Ekosistem NPM (Node Package Manager) menyediakan jutaan pustaka siap pakai. Manajemen dependensi dikendalikan oleh penomoran Semantic Versioning (SemVer) berformat MAJOR.MINOR.PATCH:

  • MAJOR: Naik ketika ada perubahan besar yang mematahkan kompatibilitas kode sebelumnya (breaking changes).
  • MINOR: Naik ketika ada penambahan fitur fungsional baru yang tetap kompatibel ke belakang.
  • PATCH: Naik ketika terdapat perbaikan kutu bug tanpa menambah fitur baru.

Karakter simbol pembanding dalam package.json menentukan aturan pembaruan dependensi:

  • Tanda Caret (^4.19.2): Mengizinkan pembaruan otomatis untuk versi minor dan patch, asalkan angka major tidak berubah (di bawah 5.0.0).
  • Tanda Tilde (~4.19.2): Hanya mengizinkan pembaruan untuk patch saja (di bawah 4.20.0).

Berkas package-lock.json mengunci pohon dependensi secara akurat hingga versi sub-dependensi terkecil. Di lingkungan server continuous integration (CI/CD), gunakan perintah npm ci alih-alih npm install untuk memastikan hasil instalasi benar-benar identik.

Cek pemahaman

  1. 1. Notasi semantik versi manakah yang mengindikasikan adanya pembaruan pemecah kompatibilitas lama (breaking changes)?

  2. 2. Perintah instalasi dependensi yang menghapus folder node_modules dan memasang tepat sesuai isi package-lock.json adalah...

  3. 3. Dalam sistem modul CommonJS, pemanggilan require() dieksekusi secara sinkron saat kode berjalan.