06 · Package Managers
Fase: 2 · Estimasi: 1 minggu · Prasyarat: 04 JavaScript
Kenapa ini penting
node_modules adalah bagian terbesar dari kode yang kamu kirim ke production, dan juga permukaan serangan terbesar (supply chain). Memahami cara package manager me-resolve dependensi menjelaskan bug "di mesin saya jalan" dan duplikasi package di bundle.
Peta konsep
Dasar
- npm, pnpm, yarn: perintah dasar dan perbedaannya
-
package.json:dependencies,devDependencies,peerDependencies,scripts - Semantic versioning,
^vs~ - Lockfile dan kenapa harus di-commit
Menengah
- Hoisting dan phantom dependencies
- Struktur
node_modulespnpm (symlink + content-addressable store) - Workspaces dan monorepo
- Field
exports,main,module,types,sideEffects -
npx/pnpm dlx,corepack
Deep dive
- Algoritma resolusi Node (
require.resolve, conditional exports) - Dual package hazard (ESM + CJS)
- Supply chain security: lifecycle scripts, provenance,
npm audit, lockfile-lint - Publishing:
files,prepublishOnly, npm provenance, changesets
Cara belajar
- Install package yang sama dengan npm dan pnpm, lalu bandingkan struktur
node_modulesdengantree -L 2. - Buat phantom dependency dengan sengaja (pakai package yang tidak ada di
package.json), dan lihat bagaimana pnpm menolaknya. - Baca
package.jsondari 3 library populer (React, Vue, date-fns) dan jelaskan setiap fieldexports-nya. - Publish package percobaan ke registry lokal (Verdaccio).
Uji pemahaman
- Kenapa dua versi React bisa masuk ke bundle yang sama, dan apa akibatnya?
- Kapan sebuah dependency harus jadi
peerDependency? - Apa itu dual package hazard dan bagaimana menghindarinya?
- Kenapa
pnpmlebih hemat disk dibanding npm?
Proyek latihan
| Tingkat | Proyek | Yang dilatih |
|---|---|---|
| Dasar | Setup monorepo pnpm dengan dua package yang saling bergantung | Workspaces |
| Menengah | Publish library ESM+CJS dengan types yang benar, cek dengan arethetypeswrong | exports, publishing |
| Deep | Tulis resolver sederhana yang meniru algoritma resolusi Node untuk exports | Resolusi modul |
Sumber primer
- Node.js: Modules: Packages
- pnpm: Motivation dan Symlinked node_modules structure
- npm docs: package.json
Toolkit terkait
- Repo ini adalah contoh monorepo pnpm. Lihat
packages/utils/package.json