版本控制设置

添加于: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 是保留的,不能被分配 — 请改为移除该条目,或使用 pnpm lane main --filter <pkg>。

versioning.epics#

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

将一组成员包与一个主导包绑定,把每个成员的主版本号限制在由其主导包主版本号推导出的区间内:当主导包处于主版本 M 时,成员位于 M*100 … M*100+99。

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

lead 是包名或带 ./ 前缀的工作区目录。 packages 使用 pnpm 的包选择器进行匹配 — 名称通配符、带 ./ 前缀的目录通配符,以及带 ! 前缀的否定项 — 按顺序求值,最后匹配的生效。一个包最多只能属于一个 epic。

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

versioning.changelog.storage#

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

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

使用 registry 时,不会提交 CHANGELOG.md:每次发布的章节会在发布时组装,并叠加到上一个已发布版本的变更日志之上打包进已发布的 tarball。

使用 repository 时,每个包中都会提交一个 CHANGELOG.md。

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