pnpm 11.7
pnpm 11.7 引入了 frozenStore 设置,支持针对只读包存储进行安装;新增了 --batch 标志,允许在单个请求中发布整个工作区;支持针对特定作用域的身份验证令牌;并将完整的解析与安装过程委托给 pacquet 处理。 此外,该版本还增强了对锁文件别名的处理,让多个安装路径确定,并修复了若干与发布及 Windows 平台相关的问题。
pnpm 11.7 引入了 frozenStore 设置,支持针对只读包存储进行安装;新增了 --batch 标志,允许在单个请求中发布整个工作区;支持针对特定作用域的身份验证令牌;并将完整的解析与安装过程委托给 pacquet 处理。 此外,该版本还增强了对锁文件别名的处理,让多个安装路径确定,并修复了若干与发布及 Windows 平台相关的问题。
过去,pnpm 会在任何发现 ${ENV_VAR} 占位符的地方对其进行解析替换——这包括你刚克隆的代码仓库中的 .npmrc 和 pnpm-workspace.yaml 文件。 这种机制可能被恶意仓库利用,从而窃取你环境中的敏感信息。 自 v10.34.2 和 v11.5.3 版本起,pnpm 不再解析由仓库控制的注册源及凭证配置中的环境变量。
这是一项安全修复(GHSA-3qhv-2rgh-x77r),对于某些配置而言,它属于破坏性变更。 本文介绍了此次攻击、具体发生了哪些变化,以及如何进行迁移。
pnpm 11.6 新增了一种无需配置文件的注册源身份验证方式,支持通过 npm_config_//… 和 pnpm_config_//… 环境变量进行配置;同时提高了默认网络并发数,并在仅缺失 pnpm-lock.yaml 文件时跳过完整的重新解析过程。 它还会推断可选依赖项的平台字段,从而确保绝不会下载针对其他平台的二进制文件。
pnpm 11.5 新增了 hoistingLimits 设置,用于控制 nodeLinker: hoisted 模式下依赖项的提升层级;更换了交互式提示库以修复长选项列表中的滚动问题;在信任级别中识别了暂存发布;并针对安装和 dist-tag 进行了多项修复。
pnpm 11.4 关闭了有关锁文件完整性、凭证范围、git 解析、补丁文件和依赖项别名的一系列供应链漏洞,默认情况下使让 tarball 完整性不匹配导致安装硬失败(通过具有狭窄范围的“--update-checksums”选入),并将 pnpm runtime set 更改为默认写入devEngines.runtime 而不是 engines.runtime。
pnpm 11.3 新增了对 npm 分阶段发布功能(pnpm stage)的支持;引入了全新的 trustLockfile 设置,用于跳过对已受信任的锁文件进行的供应链验证环节;此外,还提供了 pnpm pkg、pnpm repo 和 pnpm set-script 命令的原生实现。 此外,它为 pack 和 publish 命令新增了 --skip-manifest-obfuscation 标志,并降低了在大型工作区中执行 minimumReleaseAge 和 trustPolicy 验证时的内存占用。
pnpm 11.1 新增了一些命令——pnpm audit signatures、pnpm bugs 和 pnpm owner——同时还支持从任意名称的注册表安装(包括 GitHub Packages npm 注册源的内置别名),能够在 CI 中跳过运行时安装,以及修复了一些问题。
pnpm 11 来了! 此版本加强了 v10 周期中引入的安全默认设置,放弃了 npm CLI 发布回退,转而采用原生实现,将每个包的 JSON 存储索引替换为单个 SQLite 数据库,并将全局安装隔离,使其不再相互干扰。
它还需要 Node.js 22 或更高版本——pnpm 本身现在是纯 ESM。
从 v10 升级? 请参阅 从 v10 迁移到 v11 指南。 大多数配置更改都是机械性的,可以通过 pnpm-v10-to-v11 代码转换来应用。
pnpm 10.32 为 pnpm approve-builds 添加了 --all 标志,用于在不显示交互式提示的情况下批准所有待处理的构建。