pnpm 12.9.1

This release moves the WebContainer build into a separate @pnpm/wasm package, shrinks the pnpm package back to about 4 MB, and fixes pnpm publish with provenance from GitLab CI.

pnpm 11.28.4

pnpm 11.28.4 fixes two ways credentials could leak, makes pnpm install --frozen-lockfile accept several lockfiles it rejected, warns when an optional dependency cannot be fetched, and stops pnpm self-update from installing a second pnpm next to a Homebrew one.

pnpm 12.9.0

This release runs pnpm in StackBlitz WebContainers, adds a per-registry networkConcurrency setting, and records every installed project in the store. It also carries a security fix for pnpm login.

pnpm 12.8.2

pnpm 12.8.2 fixes a startup crash on Linux ppc64le and UnknownIssuer errors on systems without CA certificates. pnpm run no longer installs before every script on CI when autoDedupe is enabled, and resolution and hoisted installs on macOS are faster.

pnpm 12.8

pnpm 12.8 warns when pnpm pack or pnpm publish would ship a .env file, installs sharedWorkspaceLockfile: false workspaces concurrently, applies every setting passed as --config.<name>=<value>, and no longer leaves the Windows terminal stuck after Ctrl+C in a script. This release also carries a long list of bug fixes.

pnpm 12.7

pnpm 12.7 lets the global node shim follow .nvmrc and .node-version, adds pnpm install --allow-build and pnpm publish --publish-wait-timeout, and creates pnpm-workspace.yaml from the workspaces field of package.json. pnpm install --force no longer installs optional dependencies built for other platforms. This release also carries security fixes and a long list of bug fixes.

pnpm 11.28

pnpm 11.28 adds the forceIgnoresPlatform setting and pnpm update --peer, and brings a large batch of fixes from pnpm 12 to the JavaScript CLI: pnpm deploy, --filter, nodeLinker: hoisted, and custom modulesDir setups all behave better. It also carries security fixes for shell completion, bin shims on Nix, lifecycle scripts inside a custom modulesDir, and userAgent placeholders in pnpm-workspace.yaml.

pnpm 12.6

pnpm 12.6 ships with automatic dependency deduplication, relocatable node_modules, --save-types for installing @types/* packages alongside their counterparts, package.yaml manifest editing, and file: / link: protocols in catalogs.

pnpm 12.5

pnpm 12.5 expands Python support with editable project packages, shared workspace environments, automatic interpreter downloads, and lockfiles for multiple platforms and Python versions. It also accepts Package URLs in pnpm add, adds machine-wide task concurrency groups, and cleans up obsolete registry metadata with pnpm cache prune.

pnpm 12.4

pnpm 12.4 installs crates and Python packages next to npm packages in the same workspace, adds pnpm pipeline to run a workspace's tasks the way a CI job would, and ships binaries for six more platforms. pnpr 0.1.0-alpha.11, released alongside 12.4.1, serves Cargo, Python, and container registries beside npm, publishes across all of them in one transaction, and signs users in through OIDC.

pnpm 11.26

pnpm 11.26 brings the JavaScript CLI level with what pnpm 12 gained over the past two weeks: workspace: ranges in catalogs, the supply-chain flags on remove and update, pnpm change check for CI, and pnpm deploy without injected dependencies.

pnpm 12.2-12.3

pnpm 12.2 and 12.3 are largely a catch-up pair: a long list of things pnpm 11 did that the Rust CLI did not, put back. Catalogs learned the workspace: protocol, pnpm remove and pnpm update gained the supply-chain flags, every project-aware global command became a real executable, and hostname resolution went back to the system resolver on Linux and Windows. Large workspaces install noticeably faster.

pnpm 12.1

pnpm 12.1 brings the new workspace task scheduler to the Rust CLI, persists successful recursive tasks for precise retries, expands shared build artifacts to macOS and Windows, and moves login credentials into pnpm's structured global configuration. pnpr 0.1.0-alpha.9, released with it, makes the artifact tier independent and horizontally scalable through S3-compatible storage.

pnpm 11.25

pnpm 11.25 replaces topological batches with a task scheduler, adds configurable workspace task dependencies and per-task concurrency, and makes interrupted recursive runs resumable from the work that actually passed. It also introduces registry revisions, signed build artifacts shared through pnpr, batch approval for staged packages, automatic pruning of stale audit exceptions, and a pnpm init pin that follows the latest released pnpm.

pnpm 12.0

pnpm 12 is stable. It is a rewrite of pnpm in Rust. Upgrading should not feel like a migration. The documentation now defaults to pnpm 12, with the pnpm 11 documentation available from the version selector.

The few things that behave differently are listed in What's different in pnpm 12. This post covers what is new.

pnpm 11.24

pnpm 11.24 brings back pnpm approve-builds --global, which isolated global installs took away in v11.0, and makes recursive batch publishing group its packages by registry so a credential mismatch is caught before anything is published. It also stops --frozen-lockfile from failing over the pnpm version the lockfile pins.

pnpm 11.23

pnpm 11.23 gives the registries setting a shape that describes each registry once — its tarball layout, the scopes routed to it, the prefix it answers to — so an Artifactory or GitLab registry can finally keep its tarball URLs out of pnpm-lock.yaml. It adds virtualStoreType, makes undeclared imports resolve under ESM with the global virtual store without a plugin, teaches pnpm config get to report the settings pnpm actually acts on, and warns about settings no pnpm version recognizes.

pnpm 11.21-11.22

pnpm 11.21 和 11.22 版本对 pnpm install 进行了多项改进:针对大多数日常变更,改为原地更新锁文件而非重新解析整个依赖图;停止记录会导致 CI​​ 环境安装失败的 SSH URL;实现全局安装的原子切换,并支持在全局交互式更新中选择整个安装组;新增 pnpm cache path 命令;同时移除了通过 pnpm-workspace.yaml 重新定位 pnpm 机器级状态的功能。

pnpm 12 有什么不同

pnpm 12 是 Rust 中 pnpm 的重写版本,目前是 发布候选版本。升级并非“迁移”:除了下文列出的差异外,它保留了 pnpm 11 的命令、选项、配置和锁文件格式,且文档适用于这两个版本。

有五处不同,其中一处——即被移除的标志——是彻底失效,而非表现出不同的行为。这篇文章将它们汇总在了一起。

pnpm 11.20

pnpm 11.20 修复了从多个注册源安装依赖的项目中存在的包替换风险:现在,从指定注册源解析的包在锁文件中将记录为带有注册源标识的键。它还新增了内置的 npmjs: 别名,解决了因代理设置为空导致安装失败的问题,增强了 pnpm rebuild 对恶意锁文件的防御能力,并加快了依赖解析速度。

pnpm 11.15-11.19

pnpm 11.15 至 11.19 版本为 pnpm update 和 pnpm outdated 增加了对 GitHub Actions 的更新支持,让 pnpm update 在执行版本升级时自动生成变更集,引入了更整洁的 update 和 audit 配置项,新增 publishConfig.name 以支持使用不同名称发布包,增强了 pnpm self-update 对项目级配置的防御能力,实现了在无 TTY 环境下的网页登录功能,并支持将 = 用作 save-prefix。它们还大幅降低了大型工作区在峰值解析阶段的内存占用,并加快了兼容性依赖项变更后的重复安装速度。

pnpm 11.11-11.14

pnpm 11.11 至 11.14 版本引入了原生的工作区发布管理功能(包括 pnpm change、pnpm lane 和纯粹的 pnpm version -r 命令)、用于端到端诊断安装状态的 pnpm doctor 命令、用于管理注册源上包与组织的 pnpm access 和 pnpm team 命令、收敛覆盖机制,以及支持协议标识符的 peerDependencies 声明。它们还修复了一个路径遍历漏洞,将冷缓存解析期间的峰值内存占用降低了约 30%,并解决了对等依赖死锁问题。

pnpm 11.10

pnpm 11.10 引入了 _auth 设置以支持 CI 友好的注册源身份验证,新增了 pnpm prefix 和 pnpm issues 命令,并支持通过 pnpm self-update 安装 pnpm v12(Rust 重写版本)。此外,该版本还提高了 pnpm up 的准确性,加快了针对忽略简略元数据的注册源的解析速度,并增强了全局包管理、pnpm deploy 和 pnpm pack-app 的健壮性。

pnpm 11.9

pnpm 11.9 针对无法发布校验和的注册源计算缺失的 tarball 完整性哈希值,新增 pnpm sbom --exclude-peers 选项,优化了包含循环依赖的锁文件的审计性能,修复了对等依赖解析的不确定性问题,并收紧了 minimumReleaseAge 和 trustPolicy 的排除逻辑。

pnpm 11.8

pnpm 11.8 引入了安装“预演”功能、Node.js 包映射生成、更丰富的 SBOM 输出,使 pnpm view 默认指向当前包,并修正了 pnpm run --no-bail 的退出码。此外,该版本还修复了配置依赖项的锁文件遍历问题,以及多项关于安装/更新确定性的修复。

pnpm 11.7

pnpm 11.7 引入了 frozenStore 设置,支持针对只读包存储进行安装;新增了 --batch 标志,允许在单个请求中发布整个工作区;支持针对特定作用域的身份验证令牌;并将完整的解析与安装过程委托给 pacquet 处理。此外,该版本还增强了对锁文件别名的处理,让多个安装路径确定,并修复了若干与发布及 Windows 平台相关的问题。

pnpm 11.6

pnpm 11.6 新增了一种无需配置文件的注册源身份验证方式,支持通过 npm_config_//… 和 pnpm_config_//… 环境变量进行配置;同时提高了默认网络并发数,并在仅缺失 pnpm-lock.yaml 文件时跳过完整的重新解析过程。它还会推断可选依赖项的平台字段,从而确保绝不会下载针对其他平台的二进制文件。

pnpm 11.5

pnpm 11.5 新增了 hoistingLimits 设置,用于控制 nodeLinker: hoisted 模式下依赖项的提升层级;更换了交互式提示库以修复长选项列表中的滚动问题;在信任级别中识别了暂存发布;并针对安装和 dist-tag 进行了多项修复。

pnpm 11.4

pnpm 11.4 关闭了有关锁文件完整性、凭证范围、git 解析、补丁文件和依赖项别名的一系列供应链漏洞,默认情况下使让 tarball 完整性不匹配导致安装硬失败(通过具有狭窄范围的“--update-checksums”选入),并将 pnpm runtime set 更改为默认写入devEngines.runtime 而不是 engines.runtime。

pnpm 11.3

pnpm 11.3 新增了对 npm 分阶段发布功能(pnpm stage)的支持;引入了全新的 trustLockfile 设置,用于跳过对已受信任的锁文件进行的供应链验证环节;此外,还提供了 pnpm pkg、pnpm repo 和 pnpm set-script 命令的原生实现。此外,它为 pack 和 publish 命令新增了 --skip-manifest-obfuscation 标志,并降低了在大型工作区中执行 minimumReleaseAge 和 trustPolicy 验证时的内存占用。

pnpm 11.2

pnpm 11.2 引入了实验性的选择加入 pacquet(pnpm 的 Rust 移植版)作为安装后端,扩展了 配置依赖项 以安装一层 optionalDependencies(因此 esbuild/swc 平台二进制模式也适用于配置依赖项),连接了文档中长期存在的 pnpm login --scope 标志,并在 pnpm outdated 和 pnpm update --interactive 中显示运行时入口(Node.js、Deno、Bun)。

pnpm 11.1

pnpm 11.1 新增了一些命令——pnpm audit signatures、pnpm bugs 和 pnpm owner——同时还支持从任意名称的注册表安装(包括 GitHub Packages npm 注册源的内置别名),能够在 CI 中跳过运行时安装,以及修复了一些问题。

pnpm 11.0

pnpm 11 来了!此版本加强了 v10 周期中引入的安全默认设置,放弃了 npm CLI 发布回退,转而采用原生实现,将每个包的 JSON 存储索引替换为单个 SQLite 数据库,并将全局安装隔离,使其不再相互干扰。

它还需要 Node.js 22 或更高版本——pnpm 本身现在是纯 ESM。

从 v10 升级?请参阅 从 v10 迁移到 v11 指南。大多数配置更改都是机械性的,可以通过 pnpm-v10-to-v11 代码转换来应用。

pnpm 10.32

pnpm 10.32 为 pnpm approve-builds 添加了 --all 标志,用于在不显示交互式提示的情况下批准所有待处理的构建。

pnpm 10.31

pnpm 10.31 在更新 pnpm-workspace.yaml 时保留注释和格式,并包含大量错误修复。

pnpm 10.30

pnpm 10.30 重新设计了 pnpm why,以显示反向依赖关系树,从而更容易理解为什么安装了一个软件包。

pnpm 10.29

pnpm 10.29 为 pnpm dlx 添加了 catalog: 协议支持,允许在 pnpm-workspace.yaml 中配置 auditLevel,支持裸 workspace: 说明符,并修复了几个错误。

pnpm 10.28

pnpm 10.28 引入了一个新的 beforePacking 钩子,用于在发布时自定义 package.json,提高了过滤安装的性能,并修复了几个错误。

pnpm 10.27

pnpm 10.27 新增了一个设置,可以忽略旧版本软件包的信任策略检查,引入了一个用于全局虚拟存储修剪的项目注册表,并修复了几个错误。

pnpm 10.26

pnpm 10.26 为 git 托管的依赖项引入了更严格的安全默认值,添加了 allowBuilds 以实现细粒度的脚本权限,并包含了一个新设置来阻止特殊的传递依赖项。

pnpm 10.25

pnpm 10.25 改进了证书处理,添加了裸 pnpm init,并修复了一些影响用户体验的问题。

pnpm 10.24

pnpm 现在可以在高核心机器上自动扩展网络并发性,并发布了多项可靠性修复。

pnpm 10.23

为 pnpm list 添加了 --lockfile-only 选项,并对 pnpm self-update 进行了各种改进。

pnpm 10.22

增加了对从信任策略中排除软件包以及在发布时覆盖 engines 字段的支持。

pnpm 10.21

增加了为依赖项安装 Node.js 运行时的支持,以及配置信任策略的设置。

pnpm 10.20

此版本为 pnpm help 命令添加了 --all 标志,用于打印所有命令。

pnpm 10.19

这个版本为两个设置添加了版本控制功能:[[only BuiltDependencies] 和 [minimumReleaseAgeExclude`]。

pnpm 10.18

次要更改#

通过对慢速网络请求(包括元数据提取和 tarball 下载)发出警告,为 pnpm 添加了网络性能监控。

添加了警告阈值的配置选项:fetchWarnTimeoutMs 和 fetchMinSpeedKiBps 。当请求超过时间阈值或低于最低速度时,会显示警告消息

相关 PR:#10025。

补丁更改#

  • 在出现 EAGAIN 错误时重试文件系统操作 #9959。
  • 过时的命令遵守 minimumReleaseAge 配置 #10030。
  • 移除依赖的软件包时,正确使用 cleanupUnusedCatalogs 配置。
  • 当 scriptShell 设置为 false 时,不要因无意义的错误而失败 #8748。
  • pnpm dlx 不应在设置 minimumReleaseAge #10037 时失败。

pnpm 10.17

次要更改#

minimumReleaseAgeExclude 设置现在支持模式。

pnpm 10.16

次要更改#

延迟依赖更新的新设置#

最近发生了几起流行软件包被成功攻击的事件。为了减少安装已损坏版本的风险,我们正在引入一个新的设置,推迟安装新发布的依赖。在大多数情况下,这种攻击很快就被发现,而且恶意的版本在一个小时内从注册表中删除。

pnpm 10.14

增加了对 JavaScript 运行时安装的支持#

在 devEngines.runtime (在 package.json中) 中声明 Node.js, Deno 或 Bun ,并让 pnpm 自动下载并固定它。