版本控制设置

添加于:v11.13.0

这些设置配置了 pnpm 的原生工作区发布版本管理,由 pnpm change 和独立的 pnpm version -r 驱动。请参阅发布管理了解它们归属的工作流程。

当两个工作空间项目发布相同的名称时,在 versioning.fixed、versioning.ignore 以及 versioning.lanes 的键中,可通过以 ./ 为前缀的工作空间相对目录来引用该项目,而非使用其名称。

versioning.fixed#

  • 默认值:[]
  • 类型:string[][]

总共在一个共享版本中一起发布的包的组合。共享版本是组合中当前最高的版本,由所有成员需要的最大版本升级幅度决定。

pnpm-workspace.yaml
versioning:
  fixed:
    - ['@example/cli', '@example/napi']

固定组必须一起在通道之间迁移,并且必须完全位于某个 epic 之内或完全在其之外。

versioning.ignore#

  • 默认值:[]
  • 类型:string[]

永远从版本控制和依赖传播中排除的包。请求对被忽略包进行实际版本提升的变更意图会失败。

pnpm-workspace.yaml
versioning:
  ignore:
    - '@example/internal'

versioning.maxBump#

  • 默认值:undefined(无上限)
  • 类型:'patch','minor','major'

限定了当前检出版本可应用的发布升级范围。它是根据最后组装的发布计划强制执行的,在依赖传播和固定组解析之后进行,因此一个仅修补的维护分支不会意外发布次要修改。

pnpm-workspace.yaml
versioning:
  maxBump: patch

versioning.lanes#

  • 默认值:{}
  • 类型:** Record <string, string>**

将一个包映射到它所在的发布通道。通道是一条并行发布轨道,用于发布 X.Y.Z-<lane>.N 形式的预发布版本;所有未列出的包都位于保留的默认通道 main 上,并发布稳定版本。

pnpm-workspace.yaml
versioning:
  lanes:
    '@example/cli': alpha

通道名称只能包含字母数字和连字符,且不能全为数字。 main is reserved and cannot be assigned. Remove the entry instead, or use pnpm lane main --filter <pkg>.

versioning.epics#

  • 默认值:[]
  • 类型:Array<{ lead: string, packages: string[] }>

Ties a group of member packages to a lead package, constraining every member's major version to a band derived from the lead's major: while the lead is on major M, members live in M*100 to M*100+99.

pnpm-workspace.yaml
versioning:
  epics:
    - lead: '@example/app'
      packages:
        - './packages/**'
        - '!./packages/private-*'

lead 是包名或带 ./ 前缀的工作区目录。 packages is matched with pnpm's package selectors (name globs, ./-prefixed directory globs, and !-prefixed negations), evaluated in order, last match wins. 一个包最多只能属于一个 epic。

关于区间如何强制执行与重新设定基准,请参见 Epics。

versioning.changelog.storage#

  • 默认值:'registry'
  • 类型:'registry'、'repository'

发布变更日志所在的位置。

选择 registry 时不会提交 CHANGELOG.md:每次发布的章节在发布时组装,并在上一个已发布版本的变更日志基础上打包进发布的 tarball 中。

选择 repository 时,每个包中都会提交 CHANGELOG.md。

Private packages always use repository storage, as they are never published.

pnpm-workspace.yaml
versioning:
  changelog:
    storage: repository