Ce face pnpm și yarn (comparație cu npm)
pnpm și Yarn sunt alternative la npm care citesc același package.json și instalează din același registru. pnpm păstrează fiecare versiune de pachet o singură dată pe disc și pune în node_modules legături spre ea; un pachet poate importa doar dependențele declarate de el. Yarn (versiunile 2 și mai noi, „Berry”) poate lucra și fără node_modules (modul Plug’n’Play). Un proiect folosește un singur manager: fiecare are lock-ul lui.
| Acțiune | npm | pnpm | Yarn 4 |
|---|---|---|---|
| Instalează tot | npm install |
pnpm install |
yarn |
| Adaugă un pachet | npm install ms |
pnpm add ms |
yarn add ms |
| Pachet de dezvoltare | npm install -D vitest |
pnpm add -D vitest |
yarn add -D vitest |
| Elimină | npm uninstall ms |
pnpm remove ms |
yarn remove ms |
| Rulează un script | npm run build |
pnpm build |
yarn build |
| Instalare exactă (CI) | npm ci |
pnpm install --frozen-lockfile |
yarn install --immutable |
| Comandă fără instalare | npx cowsay |
pnpm dlx cowsay |
yarn dlx cowsay |
| Actualizează | npm update |
pnpm update |
yarn up |
| De ce e instalat | npm explain ms |
pnpm why ms |
yarn why ms |
| Fișierul lock | package-lock.json |
pnpm-lock.yaml |
yarn.lock |
| Spații de lucru | "workspaces" în package.json |
pnpm-workspace.yaml |
"workspaces" în package.json |
Corepack, unealta care descărca automat versiunea de pnpm sau Yarn cerută de câmpul "packageManager" din package.json, nu mai este inclusă în Node.js începând cu versiunea 25. Pe Node.js 25 și mai nou o instalezi separat (npm install -g corepack) sau instalezi direct managerul ales, după instrucțiunile de pe pnpm.io sau yarnpkg.com.
Exemple
Exemplul 1: Același proiect, trei manageri
Comenzile pentru a adăuga o dependență, una de dezvoltare și a rula testele. Le alegi pe cele ale managerului folosit deja în proiect (după fișierul lock).
# npm
npm install dayjs && npm install -D vitest && npm test
# pnpm
pnpm add dayjs && pnpm add -D vitest && pnpm test
# Yarn
yarn add dayjs && yarn add -D vitest && yarn test
Exemplul 2: Managerul fixat în package.json
Câmpul "packageManager" spune ce manager și ce versiune folosește proiectul. Corepack (instalat separat pe Node.js 25+) îl citește și descarcă versiunea potrivită.
{
"name": "catalog-carti",
"private": true,
"packageManager": "pnpm@10.18.0",
"scripts": { "dev": "vite", "build": "vite build" }
}
Exemplul 3: Ce manager folosește un proiect
Un script Node.js care ghicește managerul după fișierul lock prezent în director. Exemplul creează un pnpm-lock.yaml gol ca să aibă ce găsi.
import { existsSync, writeFileSync } from "node:fs";
writeFileSync("pnpm-lock.yaml", "lockfileVersion: '9.0'\n");
const manageri = {
"package-lock.json": "npm",
"pnpm-lock.yaml": "pnpm",
"yarn.lock": "yarn",
};
const gasite = Object.keys(manageri).filter((f) => existsSync(f));
if (gasite.length === 1) {
console.log(`Proiectul folosește ${manageri[gasite[0]]} (${gasite[0]})`);
} else {
console.log("Niciun lock sau mai multe:", gasite);
}
Rezultat
Proiectul folosește pnpm (pnpm-lock.yaml)
Greșeli frecvente
- Rulezi
npm installîntr-un proiect cupnpm-lock.yaml: apare un al doilea lock și versiunile instalate pot diferi de cele ale colegilor. - Te bazezi pe comanda
corepack enablepe un Node.js nou: din Node.js 25 Corepack nu mai vine la pachet și comanda nu există până nu îl instalezi. - Cu pnpm, importi un pachet pe care nu l-ai declarat (dar care exista în
node_modulescu npm, adus de altă dependență): pnpm dă eroare. Adaugă-l explicit cupnpm add.
Comenzi înrudite
npm install: Instalează pachete din registrul npm în node_modules și le trece în package.json și package-lock.json.npm ci: Instalare curată și exactă după package-lock.json, pentru servere de build, CI și producție.package-lock.json: Fișierul în care npm notează versiunea exactă a fiecărui pachet instalat, ca toată lumea să primească același node_modules.npm workspaces: Mai multe pachete într-un singur depozit (monorepo), cu un singur node_modules și comenzi rulate în toate deodată.npx / npm exec: Rulează comanda unui pachet npm din proiect sau descărcat temporar, fără instalare globală.nvm (versiuni Node.js): Instalează mai multe versiuni de Node.js pe același calculator și treci de la una la alta, per proiect, cu .nvmrc.