This release adds the sideEffectsCache.exclude setting, stops pnpm install from waiting on the daily update check, and keeps pnpm from aborting with a core dump when the reader of its output exits.
Minor Changes
-
Added the
sideEffectsCache.excludesetting for packages whose build depends on something pnpm cannot include in the cache key, such as the system libraries a native addon links against. pnpm builds the listed packages in every project and never restores or saves their builds through the side-effects cache, locally or on aremoteCacheserver. Under the global virtual store, each project gets its own copy of these packages and of the packages that depend on them. Entries use the samename,@scope/*, andname@versionpatterns asminimumReleaseAgeExclude#5271. -
pnpm loginnow prints thenpm-noticeresponse header during web-based login. Registries use it to show the verification code that completes the sign-in in the browser.
Patch Changes
Installing packages
-
pnpm installandpnpm addno longer wait for the daily update check. If the command finishes first, pnpm skips the update notice and checks again next time. On a registry that accepted the connection but never answered, an install that had nothing to do used to take minutes #16839. -
pnpm install,pnpm addandpnpm updatenow reusepnpm-lock.yamlwhen the workspace configures a catalog entry that no dependency references, such as an unused entry or one whose package anoverridesentry replaces. Before, every resolution in such a workspace resolved all dependencies again from the registry #16923. -
pnpm installnow looks up a git dependency's branch or tag once per install, even when many workspace projects depend on it. WithlinkWorkspacePackagesenabled, it used to rungit ls-remoteonce per project #16899. -
A filtered install, such as
pnpm install --filter <pkg>, now keeps thepnpm-lock.yamlentries of workspace projects that are missing from disk, as in a sparse checkout. Their importers, packages, and catalog entries stay even when the filter matches every project on disk #16931. -
pnpm now decides whether a dependency that a package also declares as an optional peer is linked as a dependency or as a peer from the shallowest path that reaches the package. When an existing lockfile records such a dependency as a regular dependency and a newly added dependency now provides the peer, pnpm records it as a peer, as a fresh install does. The lockfile entry of such a package can change on the next install #16901.
-
An install that adds nothing to the store no longer changes the modification time of the store directory. CI caches that check modification times, such as GitLab's, no longer re-upload an unchanged store #16929.
Running commands and scripts
-
pnpm no longer aborts with a core dump when the reader of its output has exited, as in
pnpm list | head -1orpnpm start 2>&1 | head -1. The command finishes with its usual exit code, and a failing script's exit code is kept. A write to stdout that fails for another reason, such as a full disk, ends the command with exit code 1 #16904 pnpm/tasks#132. -
On Windows,
pnpm exec,pnpm run, and commands such aspnpm nxnow return when the command they run exits, even if it left a detached process running and pnpm's output is redirected or piped. Previously a shell reading that output waited until the detached process, such as the Nx daemon, exited #16930. -
Commands that do not write the project manifest now leave a missing
package.jsonabsent. This covers queries such aspnpm whyandpnpm outdated,pnpm fetch,pnpm dedupe --check, and commands that exit with an error, such aspnpm rt ls. These commands used to create one from the initialization template.pnpm sbomrun from a lockfile alone now reports the root component asunknownwith version0.0.0#16907. -
pnpm runnow reports a failed script as a JSON record under--reporter=ndjson. It printed a plain[ELIFECYCLE]line to stderr. -
pnpm runno longer prints[ELIFECYCLE] Command failed with exit code N.to stderr when a script fails under--reporter=silent,--silent, or--loglevel=silent. -
pnpm pipeline --dry-runno longer writes a run report when no projects are selected. With--jsonit prints{"tasks": []}pnpm/tasks#126.
Packing and publishing
-
pnpm packandpnpm publishnow ship the whole gitignored directory thatmain,browser, orbinpoints into, as npm does. Previously only themainandbinfiles themselves were packed, and a gitignoredbrowserfile was left out #16908. -
pnpm packandpnpm publishnow honor a.npmignoreor.gitignoreinside a subdirectory whenpackage.jsonhas afilesfield. The package root's ignore files and those inherited from the workspace are still skipped #16909.
Setting up pnpm and toolchains
-
--registry,--https-proxy,--http-proxy, and--no-proxynow apply when pnpm resolves and downloads the pnpm version a project pins inpackageManager. Before, these lookups went tohttps://registry.npmjs.org/, which a firewall that only allows a private registry blocks #16911. -
On Windows,
pnpm installnow installs the Rust toolchain for rustup's default host, so a machine set up withrustup set default-host x86_64-pc-windows-gnugets the MinGW toolchain. Without a default host, pnpm installs the MSVC toolchain for the machine's architecture, as rustup does. This includes a pnpm built for MinGW, such as the MSYS2 package, which has installed the MinGW toolchain since 12.13.0. An x64 pnpm on ARM64 Windows now installs the ARM64 toolchain #16854.
Platinum Sponsors
|
|
|
|
|
|
Gold Sponsors
|
|
|
|
|
|
|
|
|
|
|