mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-29 04:21:39 -04:00
## Summary - Support specifying the pnpm version via `devEngines.packageManager` in `package.json`, as an alternative to the `packageManager` field - Unlike `packageManager`, `devEngines.packageManager` supports semver ranges — the resolved version is stored in `pnpm-lock.env.yaml` and reused if it still satisfies the range - The `onFail` field determines behavior: `download` (auto-download), `error` (default), `warn`, or `ignore` - `devEngines.packageManager` takes precedence over `packageManager` when both are present (with a warning) - For array notation, default `onFail` is `ignore` for non-last elements and `error` for the last - For the legacy `packageManager` field, `onFail` is derived from existing config settings (`managePackageManagerVersions`, `packageManagerStrict`, `packageManagerStrictVersion`), so `main.ts` uses `onFail` as the single source of truth - Reuses `EngineDependency` type from `@pnpm/types` instead of a custom `WantedPackageManager` type ## Test plan - [x] 10 tests in `switchingVersions.test.ts` — version switching with `packageManager` field, `devEngines.packageManager` with `onFail=download` (exact + range), env lockfile reuse, corrupt binary - [x] 15 tests in `packageManagerCheck.test.ts` — version checks with `engines.pnpm`, `packageManager` field, `devEngines.packageManager` with all `onFail` values, array notation, range matching, precedence close https://github.com/pnpm/pnpm/issues/8153