Package manager adalah alat yang mencari, mengunduh, memasang, meng-update dan menghapus software untukmu, cukup lewat satu perintah. Mirip Play Store di HP, tapi diketik di terminal: kamu sebut nama package-nya, dia ambil dari gudang online (namanya registry atau repository), memasangnya sekalian dengan apa pun yang dibutuhkan package itu, lalu mencatat apa saja yang sudah terpasang.
🧪 Tebakan cepat: temanmu clone proyekmu tanpa
package-lock.json. Dipackage.jsontertulis"format-rupiah": "^1.2.0", dan registry sekarang punya versi 1.2.5, 1.3.0 dan 2.0.0. Versi berapa yang terpasang di laptopnya? Tebak dulu, jawabannya ada di bagian "Tanda ^ dan ~ di depan versi".
Dua level: komputer dan proyek
Ada dua jenis package manager, dan kamu bakal memakai keduanya:
| Level | Yang dipasang | Alatnya | Disimpan di |
|---|---|---|---|
| Komputer | program yang dipakai di mana saja: git, node, nginx |
apt (Ubuntu, Debian), brew (macOS) |
folder sistem, sekali untuk semua proyek |
| Proyek | library yang dipakai kode satu proyek | npm, pnpm, yarn (JavaScript), composer (PHP), pip (Python) |
folder proyek itu sendiri |
Install program untuk komputermu: apt dan brew
# Ubuntu / Debian
sudo apt update # perbarui daftar package dari server
sudo apt install git # pasang git
git --version # cek: git sudah bisa dipakai
# macOS, pakai Homebrew
brew install git
apt(Advanced Package Tool) adalah package manager bawaan Ubuntu dan Debian. Dia menulis ke folder sistem, jadi butuh izin admin:sudodi depannya artinya "jalankan sebagai admin", dan kamu akan diminta password.sudo apt updatecuma memperbarui daftar package yang tersedia, belum memasang apa-apa. Biasakan menjalankannya sebeluminstall. Untuk meng-upgrade semua yang sudah terpasang:sudo apt upgrade.brew(Homebrew) adalah package manager paling populer di macOS. Mac baru belum punya: pasang dulu sekali dengan perintah dari situs brew.sh.brewgak perlusudo.- Pola perintahnya mirip di mana-mana:
install,uninstall(di apt:remove),upgrade,search. Fedora punyadnf, Windows punyawinget.
Install library untuk proyek: npm
Contoh: proyek toko online di folder proyek-toko butuh library untuk menulis harga dalam format rupiah. Kita pakai package contoh bernama format-rupiah, dan waktu kamu memasangnya, versi terbarunya 1.2.0.
$ npm install format-rupiah
added 1 package, and audited 2 packages in 1s
found 0 vulnerabilities
Satu perintah itu mengubah tiga hal di folder proyek:
package.jsondapat baris baru di bagiandependencies:"format-rupiah": "^1.2.0". Ini daftar belanja proyekmu: package apa saja, dan versi berapa yang boleh.node_modules/format-rupiah/berisi kode library-nya. Folder ini bisa dibuat ulang kapan saja dengannpm install, jadi gak ikut di-commit (tulisnode_modules/di.gitignore).package-lock.jsonmencatat versi tepat yang terpasang,1.2.0, lengkap dengan alamat unduhannya.
Perintah npm yang paling sering dipakai:
npm install # pasang semua yang tertulis di package.json
npm install format-rupiah # tambah satu package
npm install -D vitest # tambah package yang cuma dipakai saat develop (devDependencies)
npm uninstall format-rupiah # hapus package
npm run dev # jalankan script "dev" dari package.json
pnpm dan yarn mengerjakan hal yang sama dengan nama perintah yang sedikit beda: pnpm add format-rupiah, yarn add format-rupiah. Di PHP ada composer require nama/package, di Python ada pip install requests.
Tanda ^ dan ~ di depan versi
Versi package ditulis MAJOR.MINOR.PATCH. Aturan ini namanya semantic versioning (semver):
- PATCH naik (1.2.0 jadi 1.2.5): perbaikan bug.
- MINOR naik (1.2.0 jadi 1.3.0): fitur baru, kode lama tetap jalan.
- MAJOR naik (1.3.0 jadi 2.0.0): ada perubahan yang bisa merusak kode lama.
Tanda di depan versi di package.json menentukan versi mana yang boleh dipasang. Tiga bulan setelah kamu install, registry punya 1.2.0, 1.2.5, 1.3.0 dan 2.0.0:
| Tulisan di package.json | Artinya | Yang boleh | Tanpa lock file, npm memasang |
|---|---|---|---|
^1.2.0 |
1.x.x, minimal 1.2.0 | 1.2.0, 1.2.5, 1.3.0 | 1.3.0 |
~1.2.0 |
1.2.x, minimal 1.2.0 | 1.2.0, 1.2.5 | 1.2.5 |
1.2.0 |
persis itu | 1.2.0 | 1.2.0 |
Tanpa lock file, npm memilih versi tertinggi yang boleh. ^ adalah tulisan bawaan setiap kali kamu npm install sebuah package, jadi temanmu dapat 1.3.0, bukan 2.0.0, karena ^ gak pernah melompati MAJOR. Itu jawaban tebakannya.
Lock file: versi yang sama di semua laptop
Kalau package-lock.json ikut di-commit, npm install di laptop temanmu memasang versi yang tercatat di sana: 1.2.0, sama persis dengan punyamu, walau 1.3.0 sudah keluar. Bug "di laptopku jalan kok" jadi jauh lebih jarang.
| Package manager | Lock file |
|---|---|
| npm | package-lock.json |
| pnpm | pnpm-lock.yaml |
| yarn | yarn.lock |
| composer | composer.lock |
Di server CI, pakai npm ci: dia menghapus node_modules, memasang persis isi lock file, dan berhenti dengan error kalau lock file gak cocok dengan package.json.
⚠️ Jebakan yang sering ketemu
-
apt installtanpasudo. Yang keluar bukan git terpasang, tapi error ini. Ulangi dengansudo apt install git.E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root? -
Lock file gak di-commit,
node_modulesmalah di-commit. Yang benar kebalikannya: commitpackage-lock.json, abaikannode_modules/. -
Mencampur npm, pnpm dan yarn di satu proyek. Tiap alat bikin lock file sendiri, lalu dua lock file saling beda. Pakai satu alat saja, sesuai lock file yang sudah ada di proyek.
-
Salah alat untuk sistemnya.
brewgak ada di Ubuntu bawaan danaptgak ada di macOS, jadi yang munculcommand not found.
TL;DR: Package manager memasang, meng-update dan menghapus software lewat satu perintah. Untuk program di komputer: sudo apt install nama-package di Ubuntu/Debian (butuh sudo), brew install git di macOS. Untuk library di proyek: npm install nama menambah baris di package.json, mengisi node_modules/, dan mencatat versi tepat di package-lock.json. Versi ditulis MAJOR.MINOR.PATCH: ^1.2.0 boleh naik sampai sebelum 2.0.0, ~1.2.0 cuma boleh 1.2.x, dan tanpa lock file npm memasang versi tertinggi yang boleh. Commit lock file (bukan node_modules) supaya semua laptop dapat versi yang sama.