Package Managers — Terminal

Package Manager Package manager adalah tool untuk menginstal, mengupdate, dan mengelola software dan library. Sebagai developer, kamu akan menggunakan…

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. Di package.json tertulis "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

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:

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):

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

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.

Yang akan kamu pelajari