Pnpm 12.0
pnpm 12 是稳定的。这是用 Rust 重写的 pnpm,并故意不是一个迁移:pnpm 11 的命令、标志、设置和锁定文件格式全部继承,并且文档描述了两个版本。真正表现不同的短列表在 "pnpm 12 有什么不同" 中。本篇文章介绍了 pnpm 12 添加的 pnpm 11 从未发布的功能。使用 npm 安装最新版本时仍指向 pnpm 11 线,因此 pnpm 12 是从 next-12 标签安装的:pnpm self-update next-12 。有关其他安装 pnpm 12 的方式,包括无需 Node.js 的方法,请参见 "安装 pnpm 12"。Homebrew、winget、Scoop 和 Chocolatey 还未提供。重大更改:Git 依赖关系是身份 。对于 GitHub、GitLab 和 Bitbucket 上的存储库,指定符现在命名一个存储库,而不是选择一个传输。github:owner/repo、owner/repo、git+https://… 和 git+ssh://git@… 都通过主机的规范 HTTPS URL 解析,锁定文件永远不会记录那些主机的 SSH URL。要通过 SSH 访问一个私有托管库,须使用 git 自己的 URL 重写进行配置:git config --global url."git@github.com:" .insteadOf https://github.com/ pnpm 会调用 git,因此该重写适用于所有它的 git 操作。未知主机保留其确切的 URL,包括 SSH,嵌入凭证的 URL 则逐字保留,永远不会解析到主机档案。有关详细信息,请参见 "如何解析 git 依赖关系"。在 pnpm-workspace.yaml 中的不认识的设置会被报告 。pnpm 不认识的设置以前会默默忽略——拼写错误的 minimumReleaseAge 会丢失它本应设置的策略,且没有任何提示。现在会被报告,当键看起来像一个拼写错误时,会建议最接近的真实设置名称。它在项目固定了运行中 pnpm 满足的 pnpm 版本时会以 ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS 失败:当固定得到遵守时,该设置不可能是另一个 pnpm 版本的,因此这是一个需要修复的错误,而不是一个被忽略的键。在其他地方这是一个警告,因此尚未清理的项目仍可正常工作。pnpm config 子命令永远不会因为它而失败,所以可以仍然检查和修复损坏的文件。循环依赖图的锁定文件 。依赖循环在对等解析期间现在以规范方式被打破:每个循环的成员按包 ID 排序,关闭循环的边缘始终在相同的位置切断,无论安装是如何走入循环的。因此,锁定文件变成了依赖图的纯函数——重新排序的导入者、重新排序的依赖项和重复的安装都生产字节完全相同的锁定文件,这是它们之前无法做到的(#13846,#13865)。在大型循环密集的工作区,对等解析速度提高 2–3 倍,内存使用减少约 25%,并产生显著更小的锁定文件。现有的锁定文件仍然有效:--frozen-lockfile 未更改地使用它们,跳过解析的安装保持它们不变。第一次实际重新解析的安装重新键入循环包的行走顺序相关的对等变化一次。请参见 "如何解析对等"。packageImportMethod: auto 在 Linux 上优先使用硬链接 。重定向链接在文件系统的元数据树中材质化一个新的 inode 并复制范围记账,而硬链接是一个目录条目——在 btrfs 上,这大约将安装花费的时间一分为二。因此,在 Linux 上,auto 现在优先尝试硬链接。ext4 不变(从未支持克隆,因此 auto 已经硬链接),macOS 保持克隆优先,APFS 克隆文件是该平台低廉的原语。在 Linux 上,克隆成为第二个选项,而不是第一个,因此拒绝硬链接的存储仍会得到一个克隆;packageImportMethod: clone 仍然明确要求使用克隆。engineStrict 跟随边缘,而不是子树 。在 engineStrict 下,当通过安装包的常规依赖边缘到达不兼容的包时,安装将失败,即使整个子树都挂在 optionalDependencies 条目下。pnpm 11 安装该包并发出安装检查警告。仅通过可选边缘访问的包或通过已跳过的包仍在两个版本中被跳过(#13286)。新功能 。并非所有这些都是 pnpm 12 独有的。注册表修订、远程副作用缓存、audit.ignorePrune、批量阶段批准和 pnpm init latest-tag pin 在 pnpm 11.25 中也发布;其余的仅限于 v12,因为它们属于 Rust 重写。项目感知的全局 bin 。全局安装节点、deno 或 bun 将跟随当前项目的版本,而不是始终运行全局安装的版本——无 shell 钩子,无 use 风格命令。新的 globalShims 设置选择哪些全局安装的包获取这样的修补;默认为 { node: true, deno: true, bun: true } 并按键合并,因此 globalShims: { typescript: true } …
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡