PNpM CLI
Minor Changes
-
A new setting is now supported:
dedupe-peer-dependents.When this setting is set to
true, packages with peer dependencies will be deduplicated after peers resolution.For instance, let's say we have a workspace with two projects and both of them have
webpackin their dependencies.webpackhasesbuildin its optional peer dependencies, and one of the projects hasesbuildin its dependencies. In this case, pnpm will link two instances ofwebpackto thenode_modules/.pnpmdirectory: one withesbuildand another one without it:node_modules .pnpm webpack@1.0.0_esbuild@1.0.0 webpack@1.0.0 project1 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack project2 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack esbuildThis makes sense because
webpackis used in two projects, and one of the projects doesn't haveesbuild, so the two projects cannot share the same instance ofwebpack. However, this is not what most developers expect, especially since in a hoistednode_modules, there would only be one instance ofwebpack. Therefore, you may now use thededupe-peer-dependentssetting to deduplicatewebpackwhen it has no conflicting peer dependencies (explanation at the end). In this case, if we setdedupe-peer-dependentstotrue, both projects will use the samewebpackinstance, which is the one that hasesbuildresolved:node_modules .pnpm webpack@1.0.0_esbuild@1.0.0 project1 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack project2 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack esbuildWhat are conflicting peer dependencies? By conflicting peer dependencies we mean a scenario like the following one:
node_modules .pnpm webpack@1.0.0_react@16.0.0_esbuild@1.0.0 webpack@1.0.0_react@17.0.0 project1 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0/node_modules/webpack react (v17) project2 node_modules webpack -> ../../node_modules/.pnpm/webpack@1.0.0_esbuild@1.0.0/node_modules/webpack esbuild react (v16)In this case, we cannot dedupe
webpackaswebpackhasreactin its peer dependencies andreactis resolved from two different versions in the context of the two projects.
Patch Changes
-
The configuration added by
pnpm setupshould check if the pnpm home directory is already in the PATH before adding to the PATH.Before this change, this code was added to the shell:
export PNPM_HOME="$HOME/Library/pnpm" export PATH="$PNPM_HOME:$PATH"Now this will be added:
export PNPM_HOME="$HOME/Library/pnpm" case ":$PATH:" in *":$PNPM_HOME:"*) ;; *) export PATH="$PNPM_HOME:$PATH" ;; esac -
Add
skippedstatus in exec report summary when script is missing #6139. -
pnpm env -gshould fail with a meaningful error message if pnpm cannot find the pnpm home directory, which is the directory into which Node.js is installed. -
Should not throw an error when local dependency use file protocol #6115.
-
Fix the incorrect error block when subproject has been patched #6183
Our Gold Sponsors
<table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://bit.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80"></a> </td> <td align="center" valign="middle"> <a href="https://novu.co/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/novu.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/novu_light.svg" /> <img src="https://pnpm.io/img/users/novu.svg" width="180" /> </picture> </a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://prisma.io/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/prisma.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/prisma_light.svg" /> <img src="https://pnpm.io/img/users/prisma.svg" width="180" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://www.flightcontrol.dev/?ref=pnpm" target="_blank"><img src="https://pnpm.io/img/users/flightcontrol.png" width="240"></a> </td> </tr> </tbody> </table>
Our Silver Sponsors
<table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://leniolabs.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <img src="https://pnpm.io/img/users/leniolabs.jpg" width="80"> </a> </td> <td align="center" valign="middle"> <a href="https://vercel.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/vercel.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/vercel_light.svg" /> <img src="https://pnpm.io/img/users/vercel.svg" width="180" /> </picture> </a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://doppler.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/doppler.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/doppler_light.svg" /> <img src="https://pnpm.io/img/users/doppler.svg" width="280" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://depot.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/depot.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/depot_light.svg" /> <img src="https://pnpm.io/img/users/depot.svg" width="200" /> </picture> </a> </td> </tr> </tbody> </table>