Skip to main content

standard-version

简介

官网

standard-version 是一款遵循语义化版本( semver)和 commit message 标准规范 的版本和 changlog 自动化工具。

主要功能:

  1. git pull origin master后
  2. 根据 pacakage.json 中的 version 更新版本号,更新 changelog
  3. git add -A, 然后 git commit
  4. git tag 打版本操作
  5. push 版本 tag 和 master 分支到仓库

其中2,3,4则是 standard-version 工具会自动完成的工作,配合本地的 shell 脚本,则可以自动完成一系列版本发布的工作了。

安装

npm install -g standard-version
# or
npm install --save-dev standard-version
# 指定版本号 --release-as,-r
standard-version -r 1.1.0

默认情况下,工具会自动根据 主版本(major),次版本( minor ) or 修订版(patch) 规则生成版本号,例如如果你 package.json 中的version 为 1.0.0, 那么执行后版本号则是:1.0.1。

自定义可以通过:

$ standard-version -r minor
output 1.1.0

$ standard-version -r 2.0.0
output 2.0.0

$ standard-version -r 2.0.0-test
output 2.0.0-test

需要注意的是,这里的版本名称不是随便的字符,而是需要遵循 语义化版本( semver) 规范的

预发版本命名

# 生成预览版
$ standard-version --prerelease alpha
# 2.0.0-alpha.0
# tag 标签添加前缀,例如如果前版本号为 2.0.0
$ standard-version --tag-prefix "stable-"
# stable-v2.0.0

packag.json script

// packag.json
"scripts": {
"release": "./scripts/release.sh",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && npm run changeissueurl",
"changeissueurl": "replace 'https://github.com/myproject/issues/' 'https://redmine.example.com/' CHANGELOG.md"
},
// release.sh
#!/bin/bash

while [[ "$#" > 0 ]];
do
case $1 in
-r|--release) release="$2"; shift;;
# -b|--branch) branch="$2"; shift;;
-t|--tag-prefix) prefix="$2"; shift;;
-p|--prerelease) prerelease="$2"; shift;;
-n|--no-verify) no="true"; shift;;
*) echo "❌❌❌ Unknown parameter passed: $1"; exit 1;;
esac; shift;
done

# Default as minor, the argument major, minor or patch:
if [ -z "$release" ]; then
release="patch";
fi

echo "👌🏻 Release as $release"

# Default release branch is master
# if [ -z "$branch" ] ; then
# branch="";
# fi;

# if [ "$branch" ];
# then
# echo "✔ Branch is $branch"
# else
# echo "✔ Branch is current branch"
# fi;

# git pull origin $branch
# echo "✔ Current pull origin $branch."


# Generate version number and tag
if [ "$no" ]
then
standard-version --no-erify --infile CHANGELOG.md
echo "👌🏻 no-erify"
else
standard-version -r $release --tag-prefix $prefix --prerelease $prerelease --infile CHANGELOG.md
fi;

git push --follow-tags
echo '✅ git push success'

npm publish

echo "🎉🎉🎉 Release finished."

上面的脚本只是做了简单的分支 pull, 执行 standard-version 和最后的版本 push 工作,如果要做一些定制化的执行参数,则需要做定制修改了。