pacquet 12.0.0-alpha.18 变更详解:npm 风格版本升级、递归工作区支持与 update/audit 配置重构
包管理器开发工具CLI【免费下载链接】pnpmFast, disk space efficient package manager项目地址https://gitcode.com/gh_mirrors/pn/pnpm点击查看免费下载导读本文基于当前仓库中 pacquet 的发布说明 .changeset/changelogs/pacquet12.0.0-alpha.18.md系统梳理该 alpha 版本在版本管理、递归工作区行为、changeset 生成与配置迁移四方面的核心改动并结合 pnpm/crates 下的 Rust 源码CLI 参数解析、配置加载、changeset 生成等逐一印证实现细节。读完本文你将掌握pnpm version的 npm 风格 bump 用法与生命周期脚本行为、首个发布版本逐字出版机制、pnpm update的--changeset与 GitHub Actions 支持、dedicated lockfile 工作区下递归安装/升级/卸载的正确姿势以及update/audit新配置节与旧配置的迁移关系。背景说明本仓库根目录 README.md 将 pacquet 定位为 pnpm CLI 的实验性 Rust 移植Experimental Rust port。因此文档中出现的pnpm ...命令均指 pacquet 实现的 Rust CLI其参数与行为刻意对齐 TypeScript 版 pnpm。本文所有命令、配置与行为均以本仓库源码为准。Minor Changes版本管理与工作区能力的提升首个发布版本逐字出版不再自动跳过本版本修正了“新包首个发布”的版本语义如果一个包的 manifest 中写明的版本尚未在 registry 中发布过那么首次发布时就按该版本逐字发布而不再对其做任何自动 bump。pnpm version -r递归版与pnpm change status在规划版本时会逐一查询 registry 中每个发布包的当前版本只有当一个版本已经发布过时待处理的 changeset 才会累加生效对全新添加的包若以1100.0.0作为种子版本并带有一个minor级别的 changeset它将直接以1100.0.0发布而不会跳升到1100.1.0。从源码结构看该逻辑落在 pnpm/crates/cli/src/cli_args/version/release.rs 的发布规划流程中它调用了 changelog 模块的confirmed_published_versions确认已发布版本与unpublished_release_dirs识别尚未发布的发布目录并将两者结合以决定每个包的实际首发版本。这意味着版本规划对“registry 当前状态”是敏感的新包不再被默认视为“应该从种子版本继续向上走”。pnpm version支持 npm 风格的 bump 形式这是本版本最重要的命令级改动pnpm version从“仅消费 changeset 的发布工具”扩展为完整的 npm 风格版本命令支持两类参数bump 关键字major/minor/patch/premajor/preminor/prepatch/prerelease另有from-git从 git tag 推导版本精确版本号pnpm version exact-version如pnpm version 1.2.3语义版本合法时优先按精确版处理。两者均可通过-r递归作用于选中的 workspace 包。参数解析实现在 pnpm/crates/cli/src/cli_args/version.rs其中VersionArgs定义了全部选项VersionGitArgs定义了 git 相关选项。支持的选项一览对应clap定义选项含义默认--preid id预发布标识如alpha、beta、rc空字符串视为“不带 preid”无--allow-same-version允许 bump 到与当前相同的版本否则报ERR_PNPM_VERSION_NOT_CHANGED关--message msg/-mgit commit 信息%s会被替换为新版本号%s--no-git-tag-version不创建 git commit 与 tag关--no-commit-hooks提交版本 bump 时跳过 git commit hooks关--sign-git-tag用 GPG 对生成的 git tag 签名关--tag-version-prefix prefixtag 前缀v设为空串可去掉前缀--json以 JSON 数组输出每个包的name/currentVersion/newVersion/path关--dry-run只打印 bump 计划不实际改动关--no-git-checks跳过工作区是否干净working tree clean检查关bump 算法细节pnpm/crates/cli/src/cli_args/version/bump.rs解析顺序先尝试按 semver 解析精确版本合法即采用且兼容v前缀失败后再匹配七个 release 关键字两者都不匹配时报ERR_PNPM_INVALID_VERSION_BUMPinc()遵循 node-semver 的规则从下一个 major/minor/patch 的预发布版本 bump 时仅“去预发布化”finalizepre*系列从preid.0无 preid 时从0开始prerelease递增最右侧的数字标识精确版本Bump::Explicit直接采用此时--preid不生效。生命周期脚本与 git 行为version.rs对每个被 bump 的包依次执行preversion→ 写回 manifest →version→ 单包模式git commit tag →postversion脚本单包模式下--no-git-tag-version未设置且位于 git 仓库中时会自动创建 commit 与 tag递归模式-r下因涉及多个不同版本git commit 与 tag 会被整体跳过工作区不干净未提交改动且未跳过 git 检查时报ERR_PNPM_UNCLEAN_WORKING_TREE递归模式仍可配合--preid、--allow-same-version、--json、--dry-run等选项使用preversion/version/postversion钩子在ignore-scripts生效或 dry-run 时不会执行。递归能力补全outdated、rebuild、why、peers本版本让多个“递归敏感”的命令在 workspace 下对齐 TypeScript CLI 的行为pnpm outdated新增递归 workspace 支持pnpm list与pnpm ll现在默认检查所有 workspace 项目pnpm rebuild递归执行时尊重 workspace filter且同时适配共享 lockfile 与每项目专用 lockfilededicated lockfile两种布局pnpm why与pnpm peers在 workspace 中默认递归递归的 peers 检查尊重 workspace filter在采用 dedicated lockfile 的 workspace 中递归的why还能检查当前活动项目。这些改动在 pnpm/crates/cli/tests/suite 下有对应测试覆盖例如rebuild_recursive.rs、why.rs、peers.rs、list/workspace.rs等。pnpm update的--changeset标志与 GitHub Actions 依赖自动生成 changesetpnpm update新增--changeset标志也可在 pnpm-workspace.yaml 中设置update.changeset: true使其默认开启并用--no-changeset临时覆盖一次。更新完成后pnpm 会为所有依赖被更新改动到的 workspace 包写入一个.changeset/pnpm-update-suffix.md文件dependencies或optionalDependencies发生变化 →patchbumppeerDependencies发生变化 →majorbump通过catalog:协议消费了被更新 catalog 条目的包同样会被计入见 update_changeset.rs 中find_changed_catalog_entries/uses_changed_catalog_entry的实现跳过规则private 包、无 name 的包以及.changeset/config.json中ignore数组列出的包若.changeset/config.json不存在则打印警告且不生成 changeset若更新未触及任何包的生产/peer 依赖也打印提示不生成。从源码看pnpm/crates/cli/src/cli_args/update.rs 定义了--changeset与--no-changeset的互斥覆盖关系overrides_withchangeset 文件名用随机 id 生成pnpm-update-8 位十六进制写入时使用create_new保证不与已有文件冲突并拒绝把.changeset目录用作符号链接或不存在的路径。GitHub Actions 依赖pnpm outdated与交互式pnpm update现在会检查actions/*这类 GitHub Actions 依赖非交互式 update 可通过--include-github-actions或pnpm-workspace.yaml中update.githubActions: true包含它们。更新后的 action 会固定到精确 commit hash并在注释中保留其 release tag。dedicated lockfile 工作区的递归安装支持在sharedWorkspaceLockfile: false每个项目一份pnpm-lock.yaml的工作区中pnpm install、pnpm add、pnpm update、pnpm remove现在支持-r递归与--filter过滤执行而不再报ERR_PNPM_RECURSIVE_SHARED_LOCKFILE_UNSUPPORTED。每个被选中的项目都会基于自己的pnpm-lock.yaml、node_modules与 virtual store 独立安装行为与 pnpm 一致。相关测试覆盖在 pnpm/crates/cli/tests/suite/install_filters/dedicated_lockfiles.rs。Patch Changes修复与行为对齐修复pnpm install重写无关 lockfile 条目此前manifest 的小改动例如移除一个 devDependency可能导致其他包的开区间依赖如 jest 的types/node: *被解析到最新版本从而重写无关的pnpm-lock.yaml条目上游问题见 pnpm/pnpm#13193。本版本修复了导致“已满足条件的 lockfile 条目被重新解析”的三个 resolution-reuse 缺口catalog:协议的直连依赖此前以“解析后的 range 形式”与 lockfile 比较导致每次 install 都把所有 catalog 管理的依赖视为已变更、并连带重解析依赖它们的包现在改为按协议语义正确比较自动安装hoisted的 peer 依赖每次都被当作变更的直连依赖处理现已被排除当某个包需要重新解析、但恰好落到 lockfile 已记录的版本时其依赖子树此前仍会被重解析导致 lockfile 钉住的开区间漂移现在会直接复用 lockfile 记录。全局命令不再因 bin 目录缺失而失败pnpm add -g、pnpm runtime set -g等全局命令现在会自动创建缺失的全局 bin 目录不再报ERR_PNPM_PNPM_DIR_NOT_WRITABLE同时重新支持通用的--silent/-s缩写等价于--reportersilent例如pnpm store path --silent。pnpm unlink走 selection-aware 安装管线pnpm unlink现在复用带项目选择的安装管线与 pnpm 对齐支持-r/--filter在 workspace 内默认递归安装同时支持共享 workspace lockfile 与 dedicated lockfilesharedWorkspaceLockfile: false两种布局。此前它只会重装当前活动项目。测试见 pnpm/crates/cli/tests/suite/unlink.rs。配置迁移update与audit新设置节本版本在pnpm-workspace.yaml中新增了update与audit两个设置节取代此前命名不佳的updateConfig、auditConfig与顶层auditLevelupdate: ignoreDeps: # 原 updateConfig.ignoreDependencies - webpack - babel/* audit: level: high # 原 auditLevel ignore: # 原 auditConfig.ignoreGhsas - GHSA-xxxx-yyyy-zzzz语义说明update.ignoreDeps列出pnpm update与pnpm outdated应跳过的依赖名模式支持 glob如babel/*audit.level与audit.ignore调优pnpm audit的告警级别与忽略的 GHSA 编号。迁移规则见 pnpm/crates/config/src/workspace_yaml/apply.rs旧的updateConfig、auditConfig、auditLevel在下一个 major 版本之前仍可用当新旧两处同时设置时新节优先并打印一条警告The deprecated updateConfig setting is ignored in favor of update新节的字段会映射到内部UpdateConfig/AuditConfig结构ignore_dependencies、changeset、github_actions、ignore_ghsas等TypeScript CLI 与 Rustpacquet两侧的配置解析均能识别。配置解析的单测见 pnpm/crates/config/src/workspace_yaml/tests/behavior_trust_policy_yaml_values.rs 与 configuration_parses_common_settings_from.rs。小结与升级建议综合来看12.0.0-alpha.18 是 pacquet 向 TypeScript 版 pnpm 行为看齐的重要一步版本命令从“发布工具”进化为完整的 npm 风格 bump 工具含生命周期脚本与 git tagoutdated/list/why/peers/rebuild/unlink在 workspace 下的递归语义被补全dedicated lockfile 布局下install/add/update/remove的递归与过滤成为可能update的 changeset 生成与 GitHub Actions 依赖跟踪让“更新即留痕”成为默认工作流。升级到该版本时建议重点验证pnpm version各 bump 形式与--preid/--tag-version-prefix的实际输出、首个发布版本的 registry 查询行为、update.changeset开启后的.changeset/pnpm-update-*.md内容以及update/audit新节与旧配置共存时的警告与优先级。赞分享包管理器开发工具CLI【免费下载链接】pnpmFast, disk space efficient package manager项目地址https://gitcode.com/gh_mirrors/pn/pnpm点击查看免费下载相关推荐pacquet 12.0.0-alpha.21 变更解读GitHub Actions 环境持久化、工作流依赖检查改 opt-in 与 update --latest 修复pacquet 12.0.0 alpha.21 变更解读GitHub Actions 环境持久化、工作流依赖检查改 opt in 与 update lates包管理器开发工具CLIpacquet 12.0.0-alpha.17 变更详解pnpm Rust 移植版的安装引擎、依赖解析与 CLI 行为对齐pacquet 12.0.0 alpha.17 变更详解pnpm Rust 移植版的安装引擎、依赖解析与 CLI 行为对齐 本文基于仓库内变更日志 .chan包管理器开发工具CLIpnpmpacquet12.0.0-alpha.20 变更详解CLI 奇偶校验补全与发布、更新链路的可靠性修复pnpmpacquet12.0.0 alpha.20 变更详解CLI 奇偶校验补全与发布、更新链路的可靠性修复 本篇基于仓库 .changeset/cha包管理器开发工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考