Update pnpm to v10
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
pnpm (source) | packageManager | major | 9.15.9 -> 10.9.0 |
Release Notes
pnpm/pnpm (pnpm)
v10.9.0
Minor Changes
-
Added support for installing JSR packages. You can now install JSR packages using the following syntax:
pnpm add jsr:<pkg_name>
or with a version range:
pnpm add jsr:<pkg_name>@​<range>
For example, running:
pnpm add jsr:@​foo/bar
will add the following entry to your
package.json
:{ "dependencies": { "@​foo/bar": "jsr:^0.1.2" } }
When publishing, this entry will be transformed into a format compatible with npm, older versions of Yarn, and previous pnpm versions:
{ "dependencies": { "@​foo/bar": "npm:@​jsr/foo__bar@^0.1.2" } }
Related issue: #8941.
Note: The
@jsr
scope defaults to https://npm.jsr.io/ if the@jsr:registry
setting is not defined. -
Added a new setting,
dangerouslyAllowAllBuilds
, for automatically running any scripts of dependencies without the need to approve any builds. It was already possible to allow all builds by adding this topnpm-workspace.yaml
:neverBuiltDependencies: []
dangerouslyAllowAllBuilds
has the same effect but also allows to be set globally via:pnpm config set dangerouslyAllowAllBuilds true
It can also be set when running a command:
pnpm install --dangerously-allow-all-builds
Patch Changes
- Fix a false negative in
verifyDepsBeforeRun
whennodeLinker
ishoisted
and there is a workspace package without dependencies andnode_modules
directory #9424. - Explicitly drop
verifyDepsBeforeRun
support fornodeLinker: pnp
. CombiningverifyDepsBeforeRun
andnodeLinker: pnp
will now print a warning.
v10.8.1
Patch Changes
- Removed bright white highlighting, which didn't look good on some light themes #9389.
- If there is no pnpm related configuration in
package.json
,onlyBuiltDependencies
will be written topnpm-workspace.yaml
file #9404.
v10.8.0
Minor Changes
-
Experimental. A new hook is supported for updating configuration settings. The hook can be provided via
.pnpmfile.cjs
. For example:module.exports = { hooks: { updateConfig: (config) => ({ ...config, nodeLinker: "hoisted", }), }, };
-
Now you can use the
pnpm add
command with the--config
flag to install new configurational dependencies #9377.
Patch Changes
- Do not hang indefinitely, when there is a glob that starts with
!/
inpnpm-workspace.yaml
. This fixes a regression introduced by #9169. -
pnpm audit --fix
should update the overrides inpnpm-workspace.yaml
. -
pnpm link
should update overrides inpnpm-workspace.yaml
, not inpackage.json
#9365.
v10.7.1
Patch Changes
-
pnpm config set
should convert the settings to their correct type before adding them topnpm-workspace.yaml
#9355. -
pnpm config get
should read auth related settings via npm CLI #9345. - Replace leading
~/
in a path in.npmrc
with the home directory #9217.
v10.7.0
Minor Changes
-
pnpm config get
andlist
also show settings set inpnpm-workspace.yaml
files #9316. -
It should be possible to use env variables in
pnpm-workspace.yaml
setting names and value. -
Add an ability to patch dependencies by version ranges. Exact versions override version ranges, which in turn override name-only patches. Version range
*
is the same as name-only, except that patch application failure will not be ignored.For example:
patchedDependencies: foo: patches/foo-1.patch foo@^2.0.0: patches/foo-2.patch foo@2.1.0: patches/foo-3.patch
The above configuration would apply
patches/foo-3.patch
tofoo@2.1.0
,patches/foo-2.patch
to allfoo
versions which satisfy^2.0.0
except2.1.0
, andpatches/foo-1.patch
to the remainingfoo
versions.[!WARNING] The version ranges should not overlap. If you want to specialize a sub range, make sure to exclude it from the other keys. For example:
# pnpm-workspace.yaml patchedDependencies: # the specialized sub range 'foo@2.2.0-2.8.0': patches/foo.2.2.0-2.8.0.patch # the more general patch, excluding the sub range above 'foo@>=2.0.0 <2.2.0 || >2.8.0': 'patches/foo.gte2.patch
In most cases, however, it's sufficient to just define an exact version to override the range.
-
pnpm config set --location=project
saves the setting to apnpm-workspace.yaml
file if no.npmrc
file is present in the directory #9316. -
Rename
pnpm.allowNonAppliedPatches
topnpm.allowUnusedPatches
. The old name is still supported but it would print a deprecation warning message. -
Add
pnpm.ignorePatchFailures
to manage whether pnpm would ignore patch application failures.If
ignorePatchFailures
is not set, pnpm would throw an error when patches with exact versions or version ranges fail to apply, and it would ignore failures from name-only patches.If
ignorePatchFailures
is explicitly set tofalse
, pnpm would throw an error when any type of patch fails to apply.If
ignorePatchFailures
is explicitly set totrue
, pnpm would print a warning when any type of patch fails to apply.
Patch Changes
- Remove dependency paths from audit output to prevent out-of-memory errors #9280.
v10.6.5
Patch Changes
- Remove warnings after having explicitly approved no builds #9296.
- When installing different dependency packages, should retain the
ignoredBuilds
field in the.modules.yaml
file #9240. - Fix usages of the
catalog:
protocol in injected local workspace packages. This previously errored withERR_PNPM_SPEC_NOT_SUPPORTED_BY_ANY_RESOLVER
. #8715 - Setting
workspace-concurrency
to less than or equal to 0 should work #9297.
v10.6.4
Patch Changes
- Fix
pnpm dlx
with--allow-build
flag #9263. - Invalid Node.js version in
use-node-version
should not cause pnpm itself to break #9276. - The max amount of workers running for linking packages from the store has been reduced to 4 to achieve optimal results #9286. The workers are performing many file system operations, so increasing the number of CPUs doesn't help performance after some point.
v10.6.3
Patch Changes
-
pnpm install --prod=false
should not crash, when executed in a project with apnpm-workspace.yaml
file #9233. This fixes regression introduced via #9211. -
Add the missing
node-options
config torecursive run
#9180. -
Removed a branching code path that only executed when
dedupe-peer-dependents=false
. We believe this internal refactor will not result in behavior changes, but we expect it to make future pnpm versions behave more consistently for projects that overridededupe-peer-dependents
to false. There should be less unique bugs from turning offdedupe-peer-dependents
.See details in #9259.
v10.6.2
Patch Changes
-
pnpm self-update
should always update the version in thepackageManager
field ofpackage.json
. - Fix running pnpm CLI from pnpm CLI on Windows when the CLI is bundled to an executable #8971.
-
pnpm patch-commit
will now use the same filesystem as the store directory to compare and create patch files. - Don't show info output when
--loglevel=error
is used. -
peerDependencyRules
should be set inpnpm-workspace.yaml
to take effect.
v10.6.1
Patch Changes
- The pnpm CLI process should not stay hanging, when
--silent
reporting is used. - When
--loglevel
is set toerror
, don't show installation summary, execution time, and big tarball download progress. - Don't ignore pnpm.patchedDependencies from
package.json
#9226. - When executing the
approve-builds
command, if package.json containsonlyBuiltDependencies
orignoredBuiltDependencies
, the selected dependency package will continue to be written intopackage.json
. - When a package version cannot be found in the package metadata, print the registry from which the package was fetched.
v10.6.0
Minor Changes
-
pnpm-workspace.yaml
can now hold all the settings that.npmrc
accepts. The settings should use camelCase #9211.pnpm-workspace.yaml
example:verifyDepsBeforeRun: install optimisticRepeatInstall: true publicHoistPattern: - "*types*" - "!@​types/react"
-
Projects using a
file:
dependency on a local tarball file (i.e..tgz
,.tar.gz
,.tar
) will see a performance improvement during installation. Previously, using afile:
dependency on a tarball caused the lockfile resolution step to always run. The lockfile will now be considered up-to-date if the tarball is unchanged.
Patch Changes
-
pnpm self-update
should not leave a directory with a broken pnpm installation if the installation fails. -
fast-glob
replace withtinyglobby
to reduce the size of the pnpm CLI dependencies #9169. -
pnpm deploy
should not remove fields from the deployed package'spackage.json
file #9215. -
pnpm self-update
should not read the pnpm settings from thepackage.json
file in the current working directory. - Fix
pnpm deploy
creating apackage.json
without theimports
andlicense
field #9193. -
pnpm update -i
should list only packages that have newer versions #9206. - Fix a bug causing entries in the
catalogs
section of thepnpm-lock.yaml
file to be removed whendedupe-peer-dependents=false
on a filtered install. #9112
v10.5.2
Patch Changes
- The
pnpm config set
command should change the global.npmrc
file by default. This was a regression introduced by #9151 and shipped in pnpm v10.5.0.
v10.5.1
Patch Changes
- Throw an error message if a
pnpm-workspaces.yaml
orpnpm-workspaces.yml
file is found instead of apnpm-workspace.yaml
#9170. - Fix the update of
pnpm-workspace.yaml
by thepnpm approve-builds
command #9168. - Normalize generated link paths in
package.json
#9163 - Specifying
overrides
inpnpm-workspace.yaml
should work. -
pnpm dlx
should ignore settings from thepackage.json
file in the current working directory #9178.
v10.5.0
Minor Changes
-
Allow to set the "pnpm" settings from
package.json
via thepnpm-workspace.yaml
file #9121. -
Added support for automatically syncing files of injected workspace packages after
pnpm run
#9081. Use thesync-injected-deps-after-scripts
setting to specify which scripts build the workspace package. This tells pnpm when syncing is needed. The setting should be defined in a.npmrc
file at the root of the workspace. Example:sync-injected-deps-after-scripts[]=compile
-
The
packages
field inpnpm-workspace.yaml
became optional.
Patch Changes
-
pnpm link
with no parameters should work as if--global
is specified #9151. - Allow scope registry CLI option without
--config.
prefix such as--@​scope:registry=https://scope.example.com/npm
#9089. -
pnpm link <path>
should calculate relative path from the root of the workspace directory #9132. - Fix a bug causing catalog snapshots to be removed from the
pnpm-lock.yaml
file when using--fix-lockfile
and--filter
. #8639 - Fix a bug causing catalog protocol dependencies to not re-resolve on a filtered install #8638.
v10.4.1
Patch Changes
- Throws an error when the value provided by the
--allow-build
option overlaps with thepnpm.ignoredBuildDependencies
list #9105. - Print pnpm's version after the execution time at the end of the console output.
- Print warning about ignored builds of dependencies on repeat install #9106.
- Setting
init-package-manager
should work.
v10.4.0
Minor Changes
-
pnpm approve-builds --global
works now for allowing dependencies of globally installed packages to run postinstall scripts. -
The
pnpm add
command now supports a new flag,--allow-build
, which allows building the specified dependencies. For instance, if you want to install a package calledbundle
that hasesbuild
as a dependency and want to allowesbuild
to run postinstall scripts, you can run:pnpm --allow-build=esbuild add bundle
This will run
esbuild
's postinstall script and also add it to thepnpm.onlyBuiltDependencies
field ofpackage.json
. So,esbuild
will always be allowed to run its scripts in the future.Related MR: #9086.
-
The
pnpm init
command adds apackageManager
field with the current version of pnpm CLI #9069. To disable this behaviour, set theinit-package-manager
setting tofalse
.
Patch Changes
-
pnpm approve-builds
should work after two consecutivepnpm install
runs #9083. - Fix instruction for updating pnpm with corepack #9101.
- The pnpm version specified by
packageManager
cannot start withv
.
v10.3.0
Minor Changes
- Added a new setting called
strict-dep-builds
. When enabled, the installation will exit with a non-zero exit code if any dependencies have unreviewed build scripts (aka postinstall scripts) #9071.
Patch Changes
- Fix a false negative of
verify-deps-before-run
afterpnpm install --production|--no-optional
#9019. - Print the warning about blocked installation scripts at the end of the installation output and make it more prominent.
v10.2.1
Patch Changes
- Don't read a package from side-effects cache if it isn't allowed to be built #9042.
-
pnpm approve-builds
should work, when executed from a subdirectory of a workspace #9042. -
pnpm deploy --legacy
should work without injected dependencies. - Add information about how to deploy without "injected dependencies" to the "pnpm deploy" error message.
v10.2.0
Minor Changes
-
Packages executed via
pnpm dlx
andpnpm create
are allowed to be built (run postinstall scripts) by default.If the packages executed by
dlx
orcreate
have dependencies that have to be built, they should be listed via the--allow-build
flag. For instance, if you want to run a package calledbundle
that hasesbuild
in dependencies and want to allowesbuild
to run postinstall scripts, run:pnpm --allow-build=esbuild dlx bundle
Related MR: #9026.
Patch Changes
- Quote args for scripts with shell-quote to support new lines (on POSIX only) #8980.
- Fix a bug in which
pnpm deploy
fails to read the correctprojectId
when the deploy source is the same as the workspace directory #9001. - Proxy settings should be respected, when resolving Git-hosted dependencies #6530.
- Prevent
overrides
from adding invalid version ranges topeerDependencies
by keeping thepeerDependencies
and overriding them with proddependencies
#8978. - Sort the package names in the "pnpm.onlyBuiltDependencies" list saved by
pnpm approve-builds
.
v10.1.0
Minor Changes
- Added a new command for printing the list of dependencies with ignored build scripts:
pnpm ignored-builds
#8963. - Added a new command for approving dependencies for running scripts during installation:
pnpm approve-builds
#8963. - Added a new setting called
optimistic-repeat-install
. When enabled, a fast check will be performed before proceeding to installation. This way a repeat install or an install on a project with everything up-to-date becomes a lot faster. But some edge cases might arise, so we keep it disabled by default for now #8977. - Added a new field "pnpm.ignoredBuiltDependencies" for explicitly listing packages that should not be built. When a package is in the list, pnpm will not print an info message about that package not being built #8935.
Patch Changes
- Verify that the package name is valid when executing the publish command.
- When running
pnpm install
, thepreprepare
andpostprepare
scripts of the project should be executed #8989. - Allow
workspace:
andcatalog:
to be part of wider version range inpeerDependencies
. -
pnpm deploy
should inherit thepnpm
object from the rootpackage.json
#8991. - Make sure that the deletion of a
node_modules
in a sub-project of a monorepo is detected as out-of-date #8959. - Fix infinite loop caused by lifecycle scripts using
pnpm
to execute other scripts duringpnpm install
withverify-deps-before-run=install
#8954. - Replace
strip-ansi
with the built-inutil.stripVTControlCharacters
#9009. - Do not print patched dependencies as ignored dependencies that require a build #8952.
v10.0.0
Major Changes
-
Lifecycle scripts of dependencies are not executed during installation by default! This is a breaking change aimed at increasing security. In order to allow lifecycle scripts of specific dependencies, they should be listed in the
pnpm.onlyBuiltDependencies
field ofpackage.json
#8897. For example:{ "pnpm": { "onlyBuiltDependencies": ["fsevents"] } }
-
pnpm link
behavior updated:The
pnpm link
command now adds overrides to the rootpackage.json
.- In a workspace: The override is added to the root of the workspace, linking the dependency to all projects in the workspace.
- Global linking: To link a package globally, run
pnpm link
from the package’s directory. Previously, you needed to usepnpm link -g
. Related MR: #8653
-
Secure hashing with SHA256:
Various hashing algorithms have been updated to SHA256 for enhanced security and consistency:
- Long paths inside
node_modules/.pnpm
are now hashed with SHA256. - Long peer dependency hashes in the lockfile now use SHA256 instead of MD5. (This affects very few users since these are only used for long keys.)
- The hash stored in the
packageExtensionsChecksum
field ofpnpm-lock.yaml
is now SHA256. - The side effects cache keys now use SHA256.
- The pnpmfile checksum in the lockfile now uses SHA256 (#8530).
- Long paths inside
-
Configuration updates:
-
manage-package-manager-versions
: enabled by default. pnpm now manages its own version based on thepackageManager
field inpackage.json
by default. -
public-hoist-pattern
: nothing is hoisted by default. Packages containingeslint
orprettier
in their name are no longer hoisted to the root ofnode_modules
. Related Issue: #8378 -
Upgraded
@yarnpkg/extensions
to v2.0.3. This may alter your lockfile. -
virtual-store-dir-max-length
: the default value on Windows has been reduced to 60 characters. -
Reduced environment variables for scripts: During script execution, fewer
npm_package_*
environment variables are set. Onlyname
,version
,bin
,engines
, andconfig
remain. Related Issue: #8552 -
All dependencies are now installed even if
NODE_ENV=production
. Related Issue: #8827
-
-
Changes to the global store:
-
Store version bumped to v10.
-
Some registries allow identical content to be published under different package names or versions. To accommodate this, index files in the store are now stored using both the content hash and package identifier.
This approach ensures that we can:
-
More efficient side effects indexing. The structure of index files in the store has changed. Side effects are now tracked more efficiently by listing only file differences rather than all files. Related MR: #8636
-
A new
index
directory stores package content mappings. Previously, these files were infiles
.
-
-
Other breaking changes:
- The
#
character is now escaped in directory names withinnode_modules/.pnpm
. Related MR: #8557 - Running
pnpm add --global pnpm
orpnpm add --global @​pnpm/exe
now fails with an error message, directing you to usepnpm self-update
instead. Related MR: #8728 - Dependencies added via a URL now record the final resolved URL in the lockfile, ensuring that any redirects are fully captured. Related Issue: #8833
- The
pnpm deploy
command now only works in workspaces that haveinject-workspace-packages=true
. This limitation is introduced to allow us to create a proper lockfile for the deployed project using the workspace lockfile. - Removed conversion from lockfile v6 to v9. If you need v6-to-v9 conversion, use pnpm CLI v9.
-
pnpm test
now passes all parameters after thetest
keyword directly to the underlying script. This matches the behavior ofpnpm run test
. Previously you needed to use the--
prefix. Related MR: #8619
- The
-
node-gyp
updated to version 11. -
pnpm deploy
now tries creating a dedicated lockfile from a shared lockfile for deployment. It will fallback to deployment without a lockfile if there is no shared lockfile orforce-legacy-deploy
is set totrue
.
Minor Changes
-
Added support for a new type of dependencies called "configurational dependencies". These dependencies are installed before all the other types of dependencies (before "dependencies", "devDependencies", "optionalDependencies").
Configurational dependencies cannot have dependencies of their own or lifecycle scripts. They should be added using exact version and the integrity checksum. Example:
{ "pnpm": { "configDependencies": { "my-configs": "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==" } } }
-
New settings:
-
New
verify-deps-before-run
setting. This setting controls howpnpm
checksnode_modules
before running scripts:-
install
: Automatically runpnpm install
ifnode_modules
is outdated. -
warn
: Print a warning ifnode_modules
is outdated. -
prompt
: Prompt the user to confirm runningpnpm install
ifnode_modules
is outdated. -
error
: Throw an error ifnode_modules
is outdated. -
false
: Disable dependency checks. Related Issue: #8585
-
-
New
inject-workspace-packages
setting enables hard-linking all local workspace dependencies instead of symlinking them. Previously, this could be achieved usingdependenciesMeta[].injected
, which remains supported. Related MR: #8836
-
-
Faster repeat installs:
On repeated installs,
pnpm
performs a quick check to ensurenode_modules
is up to date. Related MR: #8838 -
pnpm add
integrates with default workspace catalog:When adding a dependency,
pnpm add
checks the default workspace catalog. If the dependency and version requirement match the catalog,pnpm add
uses thecatalog:
protocol. Without a specified version, it matches the catalog’s version. If it doesn’t match, it falls back to standard behavior. Related Issue: #8640 -
pnpm dlx
now resolves packages to their exact versions and uses these exact versions for cache keys. This ensurespnpm dlx
always installs the latest requested packages. Related MR: #8811 -
No
node_modules
validation on certain commands. Commands that should not modifynode_modules
(e.g.,pnpm install --lockfile-only
) no longer validate or purgenode_modules
. Related MR: #8657
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.