npm vs yarn vs pnpm: Quale Package Manager Usare?

THEJORD Team1 min di lettura
npmyarnpnpmnodejs

npm vs yarn vs pnpm: confronto package manager 2025. Performance, lockfile, workspace e monorepo. Quale scegliere per i tuoi progetti JavaScript e Node.js.

npm vs yarn vs pnpm: Quale Package Manager Usare?

Introduzione ai Package Manager

npm, Yarn e pnpm sono i tre principali package manager per l'ecosistema JavaScript e Node.js. Gestiscono le dipendenze dei progetti, eseguono script e pubblicano pacchetti. Ognuno ha filosofie e caratteristiche diverse che lo rendono ideale per specifici casi d'uso. Questa guida confronta i tre strumenti per aiutarti a scegliere quello giusto per il tuo progetto.

npm (Node Package Manager)

Caratteristiche

  • Default: Incluso con Node.js, nessuna installazione aggiuntiva
  • Registry: npmjs.com, il più grande repository di pacchetti
  • Maturità: Il più vecchio e stabile
  • Workspaces: Supporto nativo per monorepo

Comandi Principali

# Installazione dipendenze
npm install              # Installa da package.json
npm install lodash       # Aggiungi pacchetto
npm install -D jest      # Aggiungi come devDependency
npm install -g typescript # Installa globalmente

# Esecuzione script
npm run build
npm test                 # Shortcut per npm run test
npm start                # Shortcut per npm run start

# Gestione pacchetti
npm update               # Aggiorna tutti
npm update lodash        # Aggiorna specifico
npm uninstall lodash     # Rimuovi
npm outdated             # Mostra versioni obsolete

# Informazioni
npm list                 # Lista dipendenze
npm list --depth=0       # Solo primo livello
npm info lodash          # Info su pacchetto

package-lock.json

# Lock file per versioni esatte
# SEMPRE committare nel repository

# Contiene:
# - Versioni esatte di tutte le dipendenze
# - URL di download
# - Hash di integrità

# Reinstalla esattamente le stesse versioni
npm ci  # Clean install, più veloce e riproducibile

Yarn (Classic e Berry)

Caratteristiche

  • Performance: Installazione parallela, più veloce di npm classico
  • Plug'n'Play: Zero-installs con Yarn Berry (v2+)
  • Workspaces: Supporto maturo per monorepo
  • Offline mode: Cache locale efficiente

Installazione

# Yarn Classic (v1)
npm install -g yarn

# Yarn Berry (v2+) - consigliato per nuovi progetti
corepack enable
yarn set version stable

# Verifica versione
yarn --version

Comandi Principali

# Equivalenti npm → yarn
npm install          → yarn install
npm install lodash   → yarn add lodash
npm install -D jest  → yarn add -D jest
npm install -g pkg   → yarn global add pkg
npm uninstall lodash → yarn remove lodash
npm run build        → yarn build
npm test             → yarn test

# Comandi specifici yarn
yarn why lodash      # Perché è installato?
yarn upgrade-interactive # Aggiorna interattivamente
yarn dlx create-react-app my-app # Esegui senza installare

Yarn Berry (v2+)

# Plug'n'Play - no node_modules!
# Dipendenze in .yarn/cache come zip

# .yarnrc.yml
nodeLinker: pnp

# Zero-installs: committa la cache
# Nessun npm install necessario dopo git clone

# Vantaggi:
# - Installazione istantanea
# - Meno spazio disco
# - Riproducibilità perfetta

# Svantaggi:
# - Alcuni pacchetti non compatibili
# - Curva di apprendimento

pnpm (Performant npm)

Caratteristiche

  • Efficienza disco: Un singolo store, hardlink ai progetti
  • Velocità: Il più veloce dei tre
  • Strictness: node_modules più sicuro e corretto
  • Monorepo: Eccellente supporto workspaces

Installazione

# Via npm
npm install -g pnpm

# Via corepack (Node.js 16.13+)
corepack enable
corepack prepare pnpm@latest --activate

# Standalone (Windows)
iwr https://get.pnpm.io/install.ps1 -useb | iex

# Standalone (Unix)
curl -fsSL https://get.pnpm.io/install.sh | sh -

Comandi Principali

# Equivalenti
npm install          → pnpm install
npm install lodash   → pnpm add lodash
npm install -D jest  → pnpm add -D jest
npm install -g pkg   → pnpm add -g pkg
npm run build        → pnpm build
npm test             → pnpm test

# Comandi specifici
pnpm store path      # Percorso store globale
pnpm store prune     # Pulisci pacchetti non usati
pnpm why lodash      # Perché installato
pnpm outdated        # Versioni obsolete

Content-Addressable Store

# Come funziona pnpm
# 1. Scarica pacchetti in ~/.pnpm-store
# 2. Crea hardlink in node_modules
# 3. Stesso pacchetto usato da N progetti = 1 copia

# Esempio risparmio
# 10 progetti con React = 10 copie con npm
# 10 progetti con React = 1 copia con pnpm

# node_modules layout
node_modules/
├── .pnpm/           # Flat store delle dipendenze
│   ├── lodash@4.17.21/
│   └── express@4.18.2/
├── lodash -> .pnpm/lodash@4.17.21/node_modules/lodash
└── express -> .pnpm/express@4.18.2/node_modules/express

# Vantaggi:
# - Phantom dependencies impossibili
# - Disk usage ridotto 50-70%

Confronto Performance

Benchmark Tipico

# Installazione pulita (no cache, no lock)
npm:   45s
yarn:  35s
pnpm:  25s

# Installazione con cache (no node_modules)
npm:   20s
yarn:  10s
pnpm:   5s

# Reinstallazione (tutto cached)
npm:   12s
yarn:   3s
pnpm:   2s

# Spazio disco (10 progetti simili)
npm:   2.5 GB
yarn:  2.5 GB
pnpm:  500 MB

Tabella Confronto

FeaturenpmYarnpnpm
Velocità★★☆★★★★★★
Disk usage★★☆★★☆★★★
Monorepo★★☆★★★★★★
Compatibilità★★★★★☆★★★
Sicurezza★★☆★★★★★★
Curva apprendimento★★★★★☆★★★

Workspaces (Monorepo)

npm Workspaces

// package.json root
{
  "name": "my-monorepo",
  "workspaces": [
    "packages/*"
  ]
}

// Comandi
npm install              # Installa tutto
npm run build -w pkg-a   # Build solo pkg-a
npm run test --workspaces # Test tutti

Yarn Workspaces

// package.json root
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/*"
  ]
}

// Comandi
yarn install
yarn workspace pkg-a build
yarn workspaces foreach run build

pnpm Workspaces

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'

# Comandi
pnpm install
pnpm --filter pkg-a build
pnpm -r run build        # Tutti ricorsivamente
pnpm --filter "./apps/*" build

Quando Usare Cosa

Scegli npm quando:

  • Progetti semplici senza requisiti particolari
  • Team che preferisce lo standard
  • Nessuna necessità di ottimizzazione
  • Compatibilità massima con documentazione

Scegli Yarn quando:

  • Progetti enterprise con esigenze specifiche
  • Vuoi Plug'n'Play per zero-installs
  • Monorepo con tooling avanzato
  • Già familiari con Yarn

Scegli pnpm quando:

  • Spazio disco è un problema (molti progetti)
  • CI/CD dove velocità è critica
  • Monorepo grandi
  • Vuoi strictness sulle dipendenze

Migrazione

# Da npm a pnpm
rm -rf node_modules package-lock.json
pnpm import              # Importa da package-lock.json
pnpm install

# Da npm a yarn
rm -rf node_modules package-lock.json
yarn install

# Da yarn a pnpm
rm -rf node_modules yarn.lock
pnpm import              # Importa da yarn.lock
pnpm install

Strumenti Correlati

Per gestire progetti JavaScript:

Conclusione

La scelta del package manager dipende dalle tue priorità:

  • npm: Standard, compatibilità, semplicità
  • Yarn: Features avanzate, PnP, enterprise
  • pnpm: Performance, disk efficiency, strictness

Per nuovi progetti nel 2025, pnpm è spesso la scelta migliore per performance e efficienza. Yarn Berry è ideale se vuoi zero-installs. npm rimane solido per chi preferisce lo standard.

Per altri strumenti utili, esplora i nostri tool online gratuiti. Per documentazione ufficiale: npm docs, Yarn, pnpm.