縱觀那些 GitHub 上 star 不少的開源庫,開發流程都是極其規範的,Commitizen 即是用來規範化 git 提交信息的一個好工具。node
commitizen
一般要與適配器一塊兒使用,通俗點來講是須要一個 commit message 模板,目前主流的是符合 Angular 規範的 cz-conventional-changelog
。git
npm i -g commitizen
npm i -g cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
複製代碼
以上命令表明全局使用 cz-conventional-changelog
適配器,你也能夠經過如下命令來局部安裝適配器github
# 這種方式是使用npm來安裝
commitizen init cz-conventional-changelog --save-dev --save-exact
# 這種方式是使用yarn來安裝
commitizen init cz-conventional-changelog --yarn --dev --exact
複製代碼
假如你已經全局安裝了適配器,那麼上面的命令會報 A previous adapter is already configured. Use --force to override,如它所說,只須要加上 --force
參數便可強制使用局部適配器,成功後會在本地局部安裝 cz-conventional-changelog
,並在 package.json
中寫入如下內容npm
{
"devDependencies": {
"cz-conventional-changelog": "^2.1.0"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
複製代碼
安裝成功後便可經過命令 git-cz
來代替 git commit
進行提交了json
git-cz
具備 git commit
一切參數,就像這樣: git-cz -a
bash
VSCode
用戶能夠安裝一個 Visual Studio Code Commitizen Support 擴展以使用更友好的 commit 界面, 按下 F1
,輸入 conventional commit
,效果以下ide
每次更新版本後會自動將 package.json(et al.)
和 CHANGELOG.md
提交工具
必須確保 Commit Message 符合 Conventional Commits 規範哦!上面使用的
cz-conventional-changelog
是符合這個規範的。post
這裏我選擇全局安裝優化
npm i -g standard-version
複製代碼
方便起見,首先新增一個 npm run script
{
"version": "1.0.0",
"scripts": {
"release": "standard-version"
}
}
複製代碼
發佈初版時運行如下命令,這條命令不會修改版本號
npm run release -- -f
# or
standard-version -f
複製代碼
npm run release
# or
standard-version
複製代碼
npm run release -- -p
# or
standard-version -p
複製代碼
會獲得一個相似 1.0.1-0
1.0.1-1
... 這種版本 若是但願爲預發佈版本命名,能夠經過 --prerelease <name>
指定名稱。 例如,假設您的預發行版應該包含 alpha 前綴
npm run release -- -p alpha
# or
standard-version -p alpha
複製代碼
這將獲得一個 1.0.1-alpha.0
版本
standard-version
遵循 Semver 語義化版本規範,假如你上次 commit 時選擇的是 fix
,這時默認應該更新的是個 path
版本,若是你想手動選擇版本,能夠這樣
npm run release -- -r minor
# or
standard-version -r 1.1.0
複製代碼
當 release 後,程序會自動將修改後的 package.json
和 CHANGELOG.md
文件 commit 掉,因此當使用 pre-commit
這種鉤子時候可能就會報錯,能夠經過 --no-verify
跳過檢測
npm run release -- --no-verify
# or
standard-version -n
複製代碼
standard-version
支持一些生命週期腳本
prerelease
: 發佈以前prebump / postbump
: 版本號更新以前 / 以後prechangelog / postchangelog
: changelog 生成以前 / 以後precommit / postcommit
: package.json 和 changelog 文件提交以前 / 提交以後pretag / posttag
: 打 tag 以前 / 以後就像這樣,你能夠在某個聲明週期中偷摸作點事情 🤡
{
"standard-version": {
"scripts": {
"prebump": "echo 9.9.9"
}
}
}
複製代碼
changelog
中 issue 地址默認是 GitHub 上的,若是想修改爲 Jira
的地址,能夠經過 postchangelog
配合 replace 庫來修改它的連接地址
{
"standard-version": {
"scripts": {
"postchangelog": "replace 'https://github.com/myproject/issues/' 'https://myjira/browse/' CHANGELOG.md"
}
}
}
複製代碼
你也能夠跳過某些生命週期 (bump
, changelog
, commit
, tag
) ,假如不想它自動打 tag
,你能夠這樣
{
"standard-version": {
"skip": {
"tag": true
}
}
}
複製代碼
默認打的 tag 前綴是 v,生成的 tag 都是相似 v1.0.0 這種,能夠經過 -t
設置前綴
npm run release -- -t @scope/package\@
# or
standard-version -t @scope/package\@
複製代碼
生成的 tag 看起來像這樣 @scope/package@2.0.0
npm run release -- -h
# or
standard-version -h
複製代碼
除此以外,還能夠利用 husky
+ prettier
eslint
commitlint
lint-staged
等工具進一步優化 git 流程,利用 husky
的 pre-commit
鉤子,能夠在 commit 以前處理一些事情,就像