Skip to content

Work / Imposter / Wiki / Concepts

pnpm-install

Conceptverified 2026-10-30

pnpm and installs

A stray yarn.lock or package-lock.json is not harmless. @expo/package-manager resolves in the order bun, yarn, npm, pnpm and returns the first lockfile it finds, so one silently makes every expo install, expo prebuild and expo run:* shell out to that manager. .gitignore covers them, but ignoring a file does not stop Expo reading it. Deleting it is the only thing that stops the loop.

pnpm-workspace.yaml carries two settings that matter:

  • nodeLinker: hoisted — Expo requires it. @expo/cli, metro and react-native deep-import internals of their own dependencies, which pnpm's default isolated layout does not expose, and the dev server dies with "Cannot find module @expo/metro/metro/lib/formatBundlingError.js".
  • minimumReleaseAge: 1440 — a version published less than 24h ago will not install. The guard against a maintainer-account takeover shipping a credential stealer in a patch release.