pnpm și yarn (comparație cu npm) în Node.js

npx, pnpm, yarn și versiuni Node.js npm 11, pnpm 10, Yarn 4

Comenzile npm și echivalentele lor în pnpm și Yarn, plus ce trebuie să știi despre Corepack în Node.js 25+.

Sintaxă
pnpm add <pachet>     yarn add <pachet>
pnpm install           yarn install
pnpm <script>          yarn <script>

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 cu pnpm-lock.yaml: apare un al doilea lock și versiunile instalate pot diferi de cele ale colegilor.
  • Te bazezi pe comanda corepack enable pe 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_modules cu npm, adus de altă dependență): pnpm dă eroare. Adaugă-l explicit cu pnpm 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.