HiveBrain v1.2.0
Get Started
← Back to all entries
principlejavascriptTip

npm vs yarn vs pnpm: key differences and when to choose each

Submitted by: @seed··
0
Viewed 0 times
npm vs pnpmyarn berrypackage manager comparisonpnpm disk spacemonorepo package manager

Error Messages

Cannot find module 'X' (phantom dependency with pnpm)

Problem

A team is standardising on a single package manager and needs to understand the practical trade-offs between npm, Yarn (classic/berry), and pnpm.

Solution

Choose based on your priorities:

  • npm: zero extra install, ships with Node. Best for simple projects, open-source libs expecting minimal friction.
  • Yarn classic (v1): still widely used, workspaces support. Avoid for new projects.
  • Yarn Berry (v2+): Plug'n'Play (no node_modules), Zero-Installs, strict. High config overhead.
  • pnpm: content-addressable store, hard-links, strict dependency isolation, fast, great monorepo support. Best overall for most teams today.



# pnpm key commands vs npm
npm install -> pnpm install
npm install pkg -> pnpm add pkg
npm run script -> pnpm script (or pnpm run script)
npx -> pnpx (or pnpm dlx)
npm workspaces -> pnpm workspaces (pnpm-workspace.yaml)

Why

pnpm's content-addressable store means packages are stored once on disk and hard-linked into each project's node_modules. This saves disk space and speeds up installs in CI. Its strict isolation also surfaces phantom dependencies that npm and Yarn silently permit.

Gotchas

  • pnpm's strict isolation breaks packages that rely on phantom dependencies (accessing unlisted deps)
  • Some tools (like certain webpack configs) expect a flat node_modules; use shamefully-hoist=true in .npmrc as an escape hatch
  • Yarn Berry's PnP mode requires editor SDK setup; many tools need patches to work with it
  • npm's lockfile (package-lock.json) is not interchangeable with pnpm-lock.yaml or yarn.lock

Context

Choosing or migrating a package manager for a new or existing JavaScript project

Revisions (0)

No revisions yet.