BelajarKoding Logobelajarkoding

Platform belajar web development Indonesia. Artikel, cheat sheets, roadmap, dan code challenges untuk developer Indonesia.

Navigasi

  • Artikel
  • Cheat Sheets
  • Roadmap
  • Challenges
  • Pricing
  • Search

Produk Lain

  • JagoHermes
  • KelasClaude
  • KilatKoding
  • BelajarVibeCoding
  • JualanKoding

Support

  • Privacy Policy
  • Terms of Service
  • Email

© 2026 BelajarKoding. All rights reserved.

Galih PratamaBagian dari ekosistem Galih Pratama
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade

Daftar Isi

InstalasiInstall pnpmBasic CommandsInit ProjectInstall DependenciesUpdate DependenciesRemove DependenciesScriptsRun ScriptsScript LifecycleWorkspace (Monorepo)Setup WorkspaceWorkspace CommandsFilteringLockfilepnpm-lock.yamlNode.js Version ManagementKonfigurasi (.npmrc)Settings UmumPublishingPublish PackagePerformance TipsSpeed Up InstallsAudit SecurityGlobal Store ManagementComparison TableGlossary
pnpmNode.jsPackage Manager

pnpm Cheat Sheet

Referensi cepat pnpm package manager. Install, workspace, filtering, scripts, dan konfigurasi. Perfect buat developer yang manage monorepo atau proyek Node.js besar.

Shell6 min read1.109 kata
Silakan login atau daftar untuk membaca cheat sheet ini.

#Instalasi

#Install pnpm

Cara paling cepat install pnpm di sistem kamu.

bash
# Via npm (kalau udah ada Node.js)
npm install -g pnpm
 
# Via corepack (Node.js 16.9+)
corepack enable
corepack prepare pnpm@latest --activate
 
# Via Homebrew (macOS)
brew install pnpm
 
# Via standalone script
curl -fsSL https://get.pnpm.io/install.sh | sh -

Cek versi:

bash
pnpm --version

#Basic Commands

#Init Project

Buat project baru atau inisialisasi package.json.

bash
# Bikin package.json baru (interactive)
pnpm init
 
# Bikin package.json dengan default values
pnpm init --defaults

#Install Dependencies

bash
# Install semua dependencies dari package.json
pnpm install
# atau singkatnya
pnpm i
 
# Install package tertentu
pnpm add express
pnpm add typescript -D    # devDependencies
pnpm add react -P          # dependencies (default)
pnpm add jest -O           # optionalDependencies
 
# Install versi spesifik
pnpm add express@4.18.2
pnpm add express@latest
pnpm add next@canary
 
# Install global
pnpm add -g typescript
pnpm add -g pm2
 
# Install dari git
pnpm add github:user/repo
pnpm add github:user/repo#branch-name
pnpm add git+https://github.com/user/repo.git

#Update Dependencies

bash
# Cek package yang outdated
pnpm outdated
 
# Update semua packages ke versi terbaru (yang sesuai semver range)
pnpm update
 
# Update package tertentu
pnpm update express
 
# Update ke latest (abaikan semver range)
pnpm update --latest
pnpm update --latest express

#Remove Dependencies

bash
pnpm remove express
pnpm remove typescript -D
pnpm remove -g typescript

#Scripts

#Run Scripts

bash
# Run script dari package.json
pnpm run build
pnpm run dev
 
# Shortcut (tidak perlu "run" untuk script umum)
pnpm test
pnpm start
 
# Run dengan argumen
pnpm run build -- --output-dir=dist
 
# Run script di semua workspace packages
pnpm -r run build
 
# List semua script yang tersedia
pnpm run

#Script Lifecycle

json
{
  "scripts": {
    "prebuild": "pnpm run clean",
    "build": "tsc",
    "postbuild": "pnpm run copy-assets",
    "prepublishOnly": "pnpm run build && pnpm test"
  }
}

#Workspace (Monorepo)

#Setup Workspace

Buat file pnpm-workspace.yaml di root proyek.

yaml
# pnpm-workspace.yaml
packages:
  # semua direktori di packages/
  - 'packages/*'
  # semua direktori di apps/
  - 'apps/*'
  # direktori spesifik
  - 'tools/*'
  # exclude package tertentu
  - '!**/test/**'

#Workspace Commands

bash
# Install dependencies untuk semua packages
pnpm install
 
# Tambah dependency ke package tertentu
pnpm --filter @myorg/utils add lodash
 
# Tambah dependency internal (workspace package sebagai dependency)
pnpm --filter @myorg/api add @myorg/utils
 
# Run script di package tertentu
pnpm --filter @myorg/web build
 
# Run script di semua packages (recursive)
pnpm -r run build
pnpm -r run test
 
# Run script di semua packages yang berubah (affected)
pnpm -r --filter="...[origin/main]" run build
 
# List semua packages di workspace
pnpm -r ls --depth -1

#Filtering

Filtering adalah fitur paling powerful pnpm buat monorepo.

bash
# Filter by name
pnpm --filter @myorg/web build
pnpm -F @myorg/web build
 
# Filter by directory
pnpm --filter ./apps/web build
 
# Filter semua packages yang dependen pada @myorg/utils
pnpm --filter "...^@myorg/utils" build
 
# Filter package @myorg/web dan semua dependency-nya
pnpm --filter "@myorg/web..." build
 
# Filter package @myorg/web dan semua dependents-nya
pnpm --filter "...@myorg/web" build
 
# Filter packages yang berubah sejak commit tertentu
pnpm --filter="...[origin/main]" test
 
# Multiple filters
pnpm --filter @myorg/web --filter @myorg/api test
 
# Exclude package
pnpm --filter "!@myorg/docs" -r build

#Lockfile

#pnpm-lock.yaml

pnpm generate lockfile yang deterministic. Selalu commit file ini.

bash
# Install sesuai lockfile (tidak update)
pnpm install --frozen-lockfile
 
# Force regenerate lockfile
pnpm install --force
 
# Cek apakah lockfile up to date
pnpm install --lockfile-only

#Node.js Version Management

pnpm punya built-in Node.js version manager.

bash
# Install Node.js versi tertentu
pnpm env use --global 20
pnpm env use --global 18.17.0
pnpm env use --global lts
 
# List versi yang tersedia
pnpm env list
 
# List versi yang terinstall
pnpm env list --installed

Set Node.js version per project lewat .npmrc atau package.json:

json
{
  "engines": {
    "node": ">=20.0.0"
  }
}

#Konfigurasi (.npmrc)

#Settings Umum

File .npmrc di root proyek untuk konfigurasi.

ini
# Auto-install peers
auto-install-peers=true
 
# Strict peer dependencies
strict-peer-dependencies=false
 
# Set registry
registry=https://registry.npmjs.org/
 
# Private registry (scoped packages)
@myorg:registry=https://npm.pkg.github.com/
 
# Shamefully-hoist (kompatibilitas dengan tools yang cari node_modules)
shamefully-hoist=true
 
# Isolasi node_modules (default pnpm)
node-linker=isolated
 
# Buat build lebih cepat
prefer-frozen-lockfile=true
 
# Concurrent install (jumlah parallel downloads)
network-concurrency=16

#Publishing

#Publish Package

bash
# Publish ke npm registry
pnpm publish
 
# Publish dengan tag
pnpm publish --tag beta
 
# Publish dari workspace package
pnpm --filter @myorg/utils publish
 
# Dry run (cek apa yang akan dipublish)
pnpm publish --dry-run
 
# Force publish (skip validation)
pnpm publish --no-git-checks

#Performance Tips

#Speed Up Installs

bash
# Cache store location (default ~/.local/share/pnpm/store)
# Bisa dishare antar proyek
PNPM_HOME=~/.pnpm-store pnpm install
 
# Hardlinks (default) bikin install cepet dan hemat disk
# pnpm otomatis hardlink packages dari global store
 
# Parallel downloads
pnpm install --network-concurrency 32

#Audit Security

bash
# Cek vulnerability
pnpm audit
 
# Fix otomatis
pnpm audit --fix
 
# Audit dengan format JSON
pnpm audit --json
 
# Hanya critical/high severity
pnpm audit --audit-level=high

#Global Store Management

bash
# Lihat lokasi store
pnpm store path
 
# Cek status store
pnpm store status
 
# Bersihkan package yang tidak terpakai dari store
pnpm store prune
 
# Add package ke store tanpa install
pnpm fetch

#Comparison Table

Fiturnpmyarnpnpm
Disk usageTinggiTinggiRendah (hardlink)
Install speedLambatCepatTercepat
Lockfilepackage-lock.jsonyarn.lockpnpm-lock.yaml
Workspacenpm workspacesyarn workspacespnpm-workspace.yaml
Strict node_modulesTidakTidakYa (isolated)
Plug'n'PlayTidakYaTidak
Peer dep resolutionAutoAutoManual/auto
FilteringTerbatasModeratePowerful
Content-addressable storeTidakTidakYa

#Glossary

  • Content-addressable store: Global cache yang dipake pnpm buat nyimpen semua versi package. Setiap package cuma disimpen sekali di disk, terus di-hardlink ke setiap proyek.
  • Hardlink: File system link yang nunjuk ke file yang sama di disk. Ngga ngabisin ruang extra.
  • Isolated node_modules: Struktur node_modules pnpm yang strict. Package cuma bisa akses dependency yang dideklarasi di package.json-nya, bukan dependency dari dependency lain.
  • Shamefully-hoist: Flatten semua dependencies ke root node_modules kayak npm/yarn. Berguna buat kompatibilitas, tapi ngilangin isolasi.
  • Workspace: Setup monorepo di mana multiple packages hidup dalam satu repo dan bisa saling reference.
  • Filtering: Kemampuan pnpm buat seleksi package berdasarkan nama, path, dependency graph, atau git changes.
  • Frozen lockfile: Install dengan lockfile yang ada tanpa update. Dipake di CI/CD.

Baca Cheat Sheet Lengkap

Login atau daftar akun gratis untuk membaca cheat sheet ini.

LoginDaftar Gratis
Share: