Jaman dahulu kala, sebelum ada NodeJS para web developer memaintain library dengan cara meng-copy script tag masing-masing library ke halaman web. Itu cukup ribet. Setelah adanya NodeJS dan tools Package Manager di Javascript, sekarang web developer bisa dengan gampang mengontrol library secara terstruktur hanya dengan command line saja😎. Dependensi dikelola lewat file package.json
. Seiring berjalannya waktu, Package Manager di Javascript juga makin banyak macamnya dengan segala kelebihan dan kekurangannya. Setidaknya hingga saat tulisan ini dibuat terdapat 4 Package Manager yang populer digunakan.
NPM: Si Sulung👴
Node Package Manager (NPM) adalah Package Manager tertua. Semua web developer yang menjadi saksi hidup munculnya NodeJS pasti pernah menggunakan ini😅. Waktu itu, ini adalah satu-satunya Package Manager buat Javascript, belum ada kompetitornya. NPM ini udah bundled dengan NodeJS. Command line untuk menginstall dependensi menggunakan keyword npm install <dependency>
. Setelah di-install, nanti akan dibuatkan file package-lock.json
, yaitu lock file dengan format json yang menyimpan manifest dari dependensi seperti versi yang sebenarnya terinstall, hash integrity untuk menjamin keaslian library, dan resolved sebagai asal tempat dependensi itu di-download. Saat kita menginstall library lib-pkg: ^1.0.0
maka belum tentu versi 1.0.0
yang akan terinstall. ^1.0.0
artinya versi yang di-install adalah versi terbaru dari minor & patch release jika ada, tapi Major versionnya masih 1
berdasarkan Semantic Version. Misalkan ada patch release dengan versi 1.0.1
pada library tersebut, maka versi 1.0.1
itulah yang akan terinstall. Untuk baca tentang Semantic Version ini, gw juga ada bikin tulisannya😁.
Keunggulan NPM
Karena ini adalah yang tertua dan official Package Manager NodeJS, maka wajar saja banyak yang menggunakannya. Komunitas yang menggunakan NPM ini cukup banyak, jadi kalau ada masalah kita bisa dengan gampang berkonsultasi mencari solusinya di internet😎. Dokumentasinya juga cukup lengkap di websitenya.
Kelemahan NPM
Saat install, NPM akan mendownload library dan menyimpannya ke dalam folder node_modules. NPM dapat membuat duplikat beberapa versi dari library yang sama sehingga bisa memakan storage harddisk kita. Secara performa NPM adalah yang paling lambat dibanding yang lain🤯.
Yarn: Si Gesit🏃
Yarn datang sebagai kompetitor NPM dengan iming-iming kecepatan yang lebih baik. Yarn ini di-develop oleh sesepuh web developer dari beberapa perusahaan teknologi ternama seperti Facebook karena NPM itu dinilai super lambat😓. Untuk menggunakannya kita bisa menginstallnya menggunakan NPM command. Atau untuk versi terbarunya, kita bisa menginstallnya lewat corepack, itu adalah cara yang paling direkomendasikan menurut websitenya. Command line untuk menginstall dependensi menggunakan Yarn adalah yarn add <dependency>
. Lock file dari Yarn adalah yarn.lock
. Formatnya ga seperti lock file dari NPM yang menggunakan json. Yarn menggunakan format lock tersendiri.
Keunggulan Yarn
Sesuai tujuannya, Yarn ini emang lebih cepat dari NPM karena menggunakan cache😎. Dukungan komunitasnya juga bukan kaleng-kaleng dan termasuk Package Manager dengan pengguna terbanyak. Selain itu Yarn memiliki fitur offline berkat cache tersebut.
Kelemahan Yarn
Karena bukan bagian dari bundle NodeJS, kita harus menginstallnya secara terpisah. Yarn memang lebih cepat dari NPM, tapi secara storage Yarn akan meng-copy versi library yang pernah didownload dari cache ke dalam folder node_modules sehingga ga efisien juga buat storagenya.
PNPM: Si Hemat🫙
Lalu muncul lagi satu kompetitor Package Manager, yaitu Performant Node Package Manager (PNPM). Fitur unggulannya yang berbeda dengan Package Manager yang lain adalah mengelola storage library dengan hemat. Command line untuk menginstall dependensi menggunakan PNPM adalah pnpm add <dependency>
. Lock filenya menggunakan format yaml bernama pnpm-lock.yaml
.
Keunggulan PNPM
Secara performa PNPM kurang lebih sama dengan Yarn karena menggunakan cache sehingga lebih cepat dibanding NPM. Satu keunggulan lainnya adalah PNPM tidak meng-copy files dari cache ke folder node_modules, melainkan yang disimpan pada node_modules adalah hard link atau shortcut Junction dari folder cache. Secara storage tentu ini lebih hemat. Jadi secara speed dan storage PNPM lebih unggul dari kedua Package Manager sebelumnya😎.
Kelemahan PNPM
PNPM ini masih tergolong anak kemarin sore, jadi belum terlalu banyak yang mengadopsinya. Dukungan komunitasnya belum sebesar NPM & Yarn. Karena masih baru jadi belum terlalu terdengar permasalahannya.
Bun: Anak Baru🐣
Kalau Bun ini agak lain. Bun bukan bagian dari ekosistem NodeJS. Bun punya runtime dan Package Manager sendiri. Klaimnya sih runtime mereka lebih cepat dibanding NodeJS dan Deno. Bun juga menggunakan teknik cache seperti Yarn dan PNPM. Command line untuk menginstall dependensinya adalah bun install <dependency>
. Lock filenya juga berbeda dari yang lain karena menyimpannya dengan format binary, yaitu bun.lockb
. Jadi setelah install kita ga bisa membaca lock filenya menggunakan text editor.
Keunggulan Bun
Selain cepat karena menggunakan cache, Bun juga cepat karena ekosistemnya emang beda. Bun ga menggunakan runtime NodeJS (Google Chrome Engine V8), tapi menggunakan runtime sendiri yang disebut Buntime sehingga lebih cepat. Semua benchmark di internet juga mengamini bahwa Bun ini memang lebih cepat dibanding semua Package Manager yang berjalan di ekosistem NodeJS😎. Lock filenya yang menggunakan format binary juga jadi keunggulan karena proses reading oleh system jadi lebih cepat dan ukurannya terkompresi.
Kelemahan Bun
Bun ini juga anak kemarin sore, malah versi stable-nya rilis pertama kali baru tahun lalu. Selain Package Managernya, saat ini runtime dari Bun masih ga 100% kompatibel dengan projek dari ekosistem NodeJS. Dukungan komunitasnya juga belum banyak walaupun cukup menjanjikan untuk masa depan.
Verdict
Hingga saat ini 4 Package Manager ini yang paling populer digunakan. NPM adalah Package Manager resmi dari NodeJS. Yarn datang sebagai kompetitor dengan improvement mengatasi kelemahan speed dari NPM. Lalu PNPM muncul mengatasi masalah terkait storage. Kemudian Bun juga hadir beserta ekosistem barunya menantang ekosistem NodeJS. Benchmark di internet banyak mengunggulkan Bun Package Manager dibanding Package Manager lainnya. Saat ini ga semua projek NodeJS kompatibel menggunakan runtime Bun, hanya Package Manager-nya aja yang udah siap pakai. Bun juga memiliki beberapa framework yang kompatibel 100% dengan runtime Bun, salah satunya Hono.