Aller au contenu
verdict:

pnpm 11.5.0

notable

note: la synthèse et les notes de version sont en anglais

note: pas de synthèse pour cette release plus ancienne

Nous synthétisons les releases récentes. Les notes de version originales de cette version sont ci-dessous.

release-notesgithub.com/pnpm/pnpm · 128 lignes
  1. ## Minor Changes
  2. * Added a new `hoistingLimits` setting for `nodeLinker: hoisted` installs, mirroring yarn's `nmHoistingLimits`. It accepts `none` (the default — hoist as far as possible), `workspaces` (hoist only as far as each workspace package), or `dependencies` (hoist only up to each workspace package's direct dependencies). Originally proposed in [#6468](https://github.com/pnpm/pnpm/pull/6468), closing [#6457](https://github.com/pnpm/pnpm/issues/6457).
  3. * Replaced `enquirer` with `@inquirer/prompts` for all interactive prompts. Fixes the `update -i` scrolling overflow bug where long choice lists were clipped in the terminal [#6643](https://github.com/pnpm/pnpm/issues/6643).
  4. **User-facing changes:**
  5. * `pnpm update -i` / `pnpm update -i --latest`: Scrolling now works correctly when many packages are available; the new library uses visual-line-aware pagination via `usePagination`
  6. * `pnpm audit --fix -i`: Same scrolling fix for vulnerability selection
  7. * `pnpm approve-builds`: Interactive build approval prompts updated
  8. * `pnpm patch`: Version selection and "apply to all" prompts updated
  9. * `pnpm patch-remove`: Patch removal selection updated
  10. * `pnpm publish`: Branch confirmation prompt updated
  11. * `pnpm login`: Credential prompts updated
  12. * `pnpm run` / `pnpm exec` (with `verifyDepsBeforeRun=prompt`): Confirmation prompt updated
  13. Vim-style `j`/`k` keys still work for up/down navigation in all interactive prompts.
  14. **Internal:** The `OtpEnquirer` and `LoginEnquirer` DI interfaces changed from `{ prompt }` to `{ input }` / `{ input, password }` respectively. Plugins or custom builds that inject their own enquirer mock will need to update.
  15. * Staged publishes are now recognized in the trust scale. When a package version's registry metadata carries an `approver` field, it is treated as the strongest trust evidence (ranked above trusted publishers and provenance attestations), since staged publishes require 2FA publish approvals. This prevents false-positive trust downgrade errors when moving from a staged publish to a lower trust level [#11887](https://github.com/pnpm/pnpm/issues/11887).
  16. ## Patch Changes
  17. * Fix pnpm hanging during peer resolution when an aliased install pulls in transitive packages with mutual peer cycles at different depths in the dependency tree (for example, `pnpm i nuxt@npm:nuxt-nightly@5x`). Cycles whose members hit the `findHit` cache instead of running their own `calculateDepPath` are now short-circuited by sibling resolutions at the level where the cycle is detected, so the cached path promises no longer deadlock. [#11999](https://github.com/pnpm/pnpm/issues/11999).
  18. * Fix `pnpm dist-tag add` and `pnpm dist-tag rm` against npmjs.org failing without `--otp` with `[ERR_PNPM_UNAUTHORIZED] You must be logged in to set dist-tag … "You must provide a one-time pass. Upgrade your client to npm@latest in order to use 2FA."`. pnpm now sends `npm-auth-type: web` on dist-tag writes and surfaces the resulting OTP challenge through the existing browser-based 2FA flow (the same `withOtpHandling` helper used by `pnpm publish`), so the browser opens, the user authenticates, and the dist-tag is set on retry. `--otp=<code>` continues to work via the classic flow.
  19. * Fix `minimumReleaseAgeExclude` handling in npm resolution fast paths so excluded packages do not get pinned to stale versions. Excludes are honored consistently during `publishedBy` metadata selection and cache-mtime shortcuts.
  20. * Fix the `integrity` field being dropped from the lockfile entry of a remote (non-registry) https-tarball dependency when an unrelated package is installed afterwards. URL/tarball resolvers do not return an integrity (it is only known after the tarball is downloaded), so when such a dependency was reused from the lockfile without being re-fetched, its integrity was lost. It is now carried over from the existing resolution. With pnpm's lockfile-integrity hardening, the missing integrity made subsequent `--frozen-lockfile` installs fail with `ERR_PNPM_MISSING_TARBALL_INTEGRITY`. [#12001](https://github.com/pnpm/pnpm/issues/12001).
  21. * Skip dependency re-resolution when `pnpm-lock.yaml` is missing but `node_modules/.pnpm/lock.yaml` exists and still satisfies the manifest. `pnpm install` now reuses the materialized snapshot to regenerate `pnpm-lock.yaml` instead of walking the registry to rebuild it from scratch, turning the cache+node\_modules variation into a near-no-op for users who deleted the lockfile but kept the install [#11993](https://github.com/pnpm/pnpm/issues/11993).
  22. `--frozen-lockfile` still refuses to proceed when `pnpm-lock.yaml` is absent — the regenerated lockfile must be committed, so failing loudly is the correct behavior for CI.
  23. <!-- sponsors -->
  24. ## Platinum Sponsors
  25. <table>
  26. <tbody>
  27. <tr>
  28. <td align="center" valign="middle">
  29. <a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
  30. </td>
  31. </tr>
  32. </tbody>
  33. </table>
  34. ## Gold Sponsors
  35. <table>
  36. <tbody>
  37. <tr>
  38. <td align="center" valign="middle">
  39. <a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  40. <picture>
  41. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/sanity.svg" />
  42. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/sanity_light.svg" />
  43. <img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity" />
  44. </picture>
  45. </a>
  46. </td>
  47. <td align="center" valign="middle">
  48. <a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  49. <picture>
  50. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" />
  51. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" />
  52. <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" />
  53. </picture>
  54. </a>
  55. </td>
  56. <td align="center" valign="middle">
  57. <a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a>
  58. </td>
  59. </tr>
  60. <tr>
  61. <td align="center" valign="middle">
  62. <a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  63. <picture>
  64. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
  65. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/serpapi_light.svg" />
  66. <img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160" alt="SerpApi" />
  67. </picture>
  68. </a>
  69. </td>
  70. <td align="center" valign="middle">
  71. <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  72. <picture>
  73. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" />
  74. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
  75. <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" />
  76. </picture>
  77. </a>
  78. </td>
  79. <td align="center" valign="middle">
  80. <a href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  81. <picture>
  82. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/stackblitz.svg" />
  83. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
  84. <img src="https://pnpm.io/img/users/stackblitz.svg" width="190" alt="Stackblitz" />
  85. </picture>
  86. </a>
  87. </td>
  88. </tr>
  89. <tr>
  90. <td align="center" valign="middle">
  91. <a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  92. <picture>
  93. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" />
  94. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" />
  95. <img src="https://pnpm.io/img/users/workleap.svg" width="190" alt="Workleap" />
  96. </picture>
  97. </a>
  98. </td>
  99. <td align="center" valign="middle">
  100. <a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
  101. <picture>
  102. <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" />
  103. <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" />
  104. <img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
  105. </picture>
  106. </a>
  107. </td>
  108. </tr>
  109. </tbody>
  110. </table>
  111. <!-- sponsors end -->

voir sur githubimported 2026-09-28 via npm