如何将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
相关产品推荐
相关产品推荐

