



























pnpm 11.10 引入了 _auth 设置以支持 CI 友好的注册源身份验证,新增了 pnpm prefix 和 pnpm issues 命令,并支持通过 pnpm self-update 安装 pnpm v12(Rust 重写版本)。 此外,该版本还提高了 pnpm up 的准确性,加快了针对忽略简略元数据的注册源的解析速度,并增强了全局包管理、pnpm deploy 和 pnpm pack-app 的健壮性。
_auth 设置pnpm 现支持 _auth 设置,允许将注册源身份验证配置为单个结构化且以 URL 为键的值。 该设置既可以在全局 pnpm 配置(config.yaml)中定义,也可以在 CI 环境中通过 pnpm_config__auth 环境变量进行配置。
使用环境变量的形式规避了一个长期存在的问题:GitHub Actions、bash 和 zsh 会静默丢弃包含 /、: 或 . 字符的环境变量名,这导致原有的 pnpm_config_//host/:_authToken=… 格式失效。 而 _auth 环境变量的名称格式常规,因此能够被正确保留:
export pnpm_config__auth='{"https://registry.npmjs.org":{"@":{"authToken":"npm-token"},"@org":{"authToken":"org-token"}}}'
全局 config.yaml 中的等效配置如下:
_auth:
https://registry.npmjs.org:
"@":
authToken: npm-token
"@org":
authToken: org-token
在每个注册源 URL 配置中,@ 代表适用于整个注册源的凭证,而像 @org 这样的作用域则将凭证绑定到同一主机上的特定作用域。 由于凭证及其目标主机包含在同一个受信任的值中,因此受仓库控制的 pnpm-workspace.yaml 或 .npmrc 文件无法将令牌重定向到其他主机——_auth 设置仅在环境变量和全局配置文件中生效,绝不会读取项目级配置文件中的设置。 关闭了 #12314。
pnpm self-update 支持安装 pnpm v12(Rust 重写版)pnpm self-update 和 packageManager 版本切换功能现已支持安装并链接 pnpm v12(Rust 重写版)。该版本发布在 next-12 分发标签下,包含 pnpm 和 @pnpm/exe 两种包名:
其原生二进制文件以 @pnpm/exe.<arch>-<0> 包的形式提供,并由 pnpm 内置安装程序直接链接——由于不依赖 Node.js 启动器,因此执行该命令时无需承担 Node.js 的启动开销。 从 v12 版本开始,安装过程将统一指向无作用域的 pnpm 包(即 Rust 可执行文件),即使是从单可执行文件格式的 @pnpm/exe 构建版本进行更新也是如此。
pnpm prefix新增的 pnpm prefix 命令用于打印当前包的前缀目录;若使用 -g 或 --global 标志,则打印全局前缀目录。
pnpm issuespnpm issues 现已成为 pnpm bugs 的别名,执行该命令会在浏览器中打开对应包的 Bug 追踪页面。
当在非交互式终端中需要 OTP 验证时,Web 认证相关的 authUrl 和 doneUrl 现在会包含在 JSON 格式的错误输出中 (#12724)。
pnpm up -r <pkg> 导致版本范围开放的无关包版本被升级的问题。 安装层现在总是根据锁文件来设定 preferredVersions,因此当你仅请求更新特定包时,版本范围为 ^x.y.z 的包将不再重新解析为更新的兼容版本 (#10662)。pnpm up <pkg> 产生的结果与基于相同清单文件进行全新安装的结果不一致的问题。 现在,针对该软件包的重新解析过程,其效果与删除了锁文件中的相关条目完全一致,同时全新安装时会采用的首选版本依然保持有效。<dep> 仅作为传递依赖存在时,执行 pnpm update <dep>@<version> 现在会输出警告,建议改用 pnpm.overrides (#12744)。--prefer-offline 解析过程。 从本地缓存加载的包元数据现在会保留在内存中,因此每个包的元数据在每次命令执行期间仅解析一次,而不再是针对每个依赖项各解析一次。node.exe 变体)清理更加规范;禁止使用 pnpm add -g pnpm@<version>,应改用 pnpm self-update;全局清单中的依赖别名在合并到路径前会经过验证;每个安装组拥有独立的全新目录;移除全局包时,不再会取消关联属于其他包的可执行文件。pnpm deploy --force 的安全性,使其拒绝不安全的部署目标,例如工作区根目录、父级目录、工作区之外的路径以及符号链接目标的父级目录。pnpm pack-app 现已禁止使用绝对路径或超出项目目录范围的 --entry / --output-dir 参数值,拒绝覆盖非普通文件类型的目标文件,并解析项目外部的 macOS codesign / ldid 签名工具,从而防止受仓库管理的 node_modules/.bin 劫持这些工具。 新增错误代码:ERR_PNPM_PACK_APP_ENTRY_OUTSIDE_PROJECT、ERR_PNPM_PACK_APP_OUTPUT_DIR_OUTSIDE_PROJECT、ERR_PNPM_PACK_APP_OUTPUT_FILE_NOT_REGULAR。pnpm pack 和 pnpm publish 在将 LICENSE 注入包中时,不再遵循工作区中软链接的 LICENSE;同时,若 prepack 生成的文件随后被 postpack 清理,这些命令也不再因此报错。jsr: 和命名注册表(如 gh:)标识符,并抛出 ERR_PNPM_INVALID_JSR_PACKAGE_NAME 或 ERR_PNPM_INVALID_NAMED_REGISTRY_PACKAGE_NAME 错误,而不再静默生成格式错误的包名。__proto__ 的依赖项将无法再通过 Object.prototype 进行写入操作。patchedDependencies 中的相对路径现在会基于锁文件所在的目录进行解析,因此从子目录运行 pnpm install 不再会因 ENOENT 错误而失败 (#12762)。pnpm peers 不再报告因缺少通过 pnpm.peerDependencyRules.ignoreMissing 忽略的对等依赖项而导致的冲突。--filter 筛选的命令的拓扑顺序问题。 这现在也适用于 --filter-prod 和混合选择 (#8335)。PNPM_CONFIG_NPMRC_AUTH_FILE 指向项目级的 .npmrc 文件时,pnpm 不再针对其中被忽略的项目级认证设置发出警告——这被视为用户明确选择信任该文件 (#12480)。ERR_PNPM_NO_MATCHING_VERSION_INSIDE_WORKSPACE)(#1379)。Authorization 请求头。SHASUMS256.txt 进行签名的运行时能够顺利通过验证。gyp_main.py 和 gyp 入口文件在 pnpm 和 @pnpm/exe 的 tarball 包中现已包含可执行权限位,因此从源码构建原生插件时不再会因权限错误而失败。--filter 的 -F 别名后不提示工作区的问题。ansi-diff),以修复输出行重复的问题。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。