Packages and Monorepos

Packages, Publishing and Monorepos

Front-End Web Development treats npm 2,036 as a way to get code into a project: npm install, a dependencies object, a caret range. This section works in the other direction — describing a package precisely enough that a registry, a bundler and three package managers agree on what it is, shipping it under a version others can depend on, proving where the tarball was built, and doing the same for a dozen packages at once.

Every command below ran on Node v25.8.0 with the bundled npm 11.11.0; the standalone npm line has moved on to 12.0.2, pnpm 69,400 to 12.4.2, Turborepo 226,392 to 2.10.13, Nx 180,159 to 23.2.1 and @changesets/cli to 3.0.3 (registry latest tags, 17 September 2026). Nothing was published: --dry-run shows what would go over the wire.

The same three jobs in the three package managers used with Node today
Task npm pnpm Yarn 11,798
Reproducible install npm ci pnpm install --frozen-lockfile yarn install --immutable
Workspace field workspaces pnpm-workspace.yaml workspaces
Run in one package npm run b -w pkg pnpm -F pkg b yarn workspace pkg b

Subsections