You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将feature分支npm包设为预发布版本,避免yarn默认安装?

解决方法

要让yarn add packageName --latest默认安装master分支发布的版本,核心是给master分支的包保留latest标签,feature分支的包使用自定义标签(npm默认会把最新发布的版本自动设为latest,所以需要主动给feature分支的包指定非latest标签)。

具体可通过修改Azure DevOps流水线配置实现,分以下两步:

1. 区分分支设置版本号(可选但推荐)

给feature分支的版本号添加预发布后缀(比如1.0.0-branch-3.1),既符合语义化版本规范,也能直观区分分支版本。可以在流水线中通过变量动态生成版本号:

variables:
  # 主分支使用正式版本号,feature分支拼接分支名后缀
  ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
    PackageVersion: ${{ parameters.Version }}
  ${{ else }}:
    # 提取分支名(从refs/heads/branch-3中得到branch-3)
    BranchName: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
    PackageVersion: ${{ parameters.Version }}-$(BranchName).$(Build.BuildId)

然后将版本号任务中的参数替换为动态变量:

- task: Npm@1
  displayName: 'npm package version'
  condition: and(succeeded(), eq(${{parameters.Publish}}, true))
  inputs:
    workingDir: ${{ parameters.Directory }}
    command: 'custom'
    customCommand: '--no-git-tag-version version $(PackageVersion)'

2. 针对分支设置npm发布标签

修改npm publish任务,根据分支添加--tag参数:master分支不指定标签(默认绑定latest),feature分支指定自定义标签(比如beta或分支名):

- task: Npm@1
  displayName: 'npm publish'
  condition: and(succeeded(), eq(${{parameters.Publish}}, true))
  inputs:
    workingDir: ${{ parameters.Directory }}
    command: 'publish'
    publishRegistry: 'useFeed'
    publishFeed: ${{ parameters.Feed }}
    # 根据分支动态设置发布标签
    customCommand: ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}: '' ${{ else }}: '--tag beta'

如果需要给每个feature分支设置独立标签,可将--tag beta替换为--tag $(BranchName)(需确保已定义BranchName变量)。

验证效果

  • master分支发布后,包的latest标签会指向该版本,执行yarn add packageName --latest将默认安装此版本
  • feature分支发布的包会带有自定义标签,若需安装feature分支版本,需执行yarn add packageName@beta或yarn add packageName@branch-3

内容的提问来源于stack exchange,提问作者ninja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:33:23