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。它们还大幅降低了大型工作区在峰值解析阶段的内存占用,并加快了兼容性依赖项变更后的重复安装速度。