該章節主要是對下文內容的概括方便日後的查閱,若是須要了解細節部分請從第二章節開始閱讀webpack
# husky 包安裝
npm install husky --save-dev
# commitlint 所需包安裝
npm install @commitlint/config-angular @commitlint/cli --save-dev
# commitizen 包安裝
npm install commitizen --save-dev
npm install commitizen -g
# standard-version 包安裝
npm install standard-version --save-dev
複製代碼
# 生成 commitlint 配置文件
echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js
# commitizen 初始化
commitizen init cz-conventional-changelog --save-dev --save-exact
複製代碼
{
"scripts": {
+ "commit": "git-cz",
+ "release": "standard-version"
},
+ "husky": {
+ "hooks": {
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
+ }
+ }
}
複製代碼
git cz
或者 npm run commit
來提交代碼npm run commit
來提交代碼git checkout master
git pull origin master
git fetch origin --prune
# 1.0.0 表示當前要發佈的版本
npm run release -- --release-as 1.0.0
git push --follow-tags origin master
複製代碼
husky 主用功能是爲 git 添加 git 鉤子,它容許咱們在使用 git 中在一些重要動做發生時觸發自定義腳本(npm script), 好比咱們能夠在 git push 以前執行特定的自定義腳本對代碼進行單元測試、又或者在 git commit 以前執行 eslint 校驗,固然本文主要介紹如何借用 husky 爲 git 添加 commit-msg 鉤子並對 commit 進行校驗。git
npm install husky --save-dev
複製代碼
我要提交代碼啦
提交代碼前須要先進行單元測試
並執行 npm test
{
+ "husky": {
+ "hooks": {
+ "pre-commit": "echo 我要提交代碼啦",
+ "commit-msg": "echo $HUSKY_GIT_PARAMS $HUSKY_GIT_STDIN",
+ "pre-push": "echo 提交代碼前須要先進行單元測試 && npn test"
+ }
+ }
}
複製代碼
commitlint 用於檢查您的提交消息是否符合規定提交格式,通常和 husky 包一塊兒使用,用於對 git commit 信息的格式進行校驗,當 commit 信息不符合規定格式的狀況下將會拋出錯誤。github
commitlint 的默認格式爲:web
# 注意:冒號前面是須要一個空格的, 帶 ? 表示非必填信息
type(scope?): subject
body?
footer?
複製代碼
類型 | 描述 |
---|---|
build | 主要目的是修改項目構建系統(例如 glup,webpack,rollup 的配置等)的提交 |
ci | 主要目的是修改項目繼續集成流程(例如 Travis,Jenkins,GitLab CI,Circle等)的提交 |
docs | 文檔更新 |
feat | 新增功能 |
merge | 分支合併 Merge branch ? of ? |
fix | bug 修復 |
perf | 性能, 體驗優化 |
refactor | 重構代碼(既沒有新增功能,也沒有修復 bug) |
style | 不影響程序邏輯的代碼修改(修改空白字符,格式縮進,補全缺失的分號等,沒有改變代碼邏輯) |
test | 新增測試用例或是更新現有測試 |
revert | 回滾某個更早以前的提交 |
chore | 不屬於以上類型的其餘類型 |
npm install --save-dev @commitlint/config-angular @commitlint/cli
複製代碼
{
"husky": {
"hooks": {
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
複製代碼
項目下新增 commitlint.config.js 文件,並針對 commitlint 進行簡單配置shell
配置說明: 規則由鍵值和配置數組組成,如:'name: [0, 'always', 72]',數組中第一位爲 level(等級),可選 0, 1, 2,0 爲 disable(禁用),1 爲 warning(警告),2 爲 error(錯誤),第二位爲該規則是否被應用,可選 always | never, 第三位爲該規則容許值。npm
module.exports = {
// 繼承默認配置
extends: [
"@commitlint/config-angular"
],
// 自定義規則
rules: {
'type-enum': [2, 'always', [
'upd',
'feat',
'fix',
'refactor',
'docs',
'chore',
'style',
'revert',
]],
'header-max-length': [0, 'always', 72]
}
};
複製代碼
在上文咱們對 git commit 信息添加了校驗,但有個缺點就是須要咱們手動編輯 commit 信息,這樣就顯得麻煩了不少,這時咱們能夠引入 commitizen,在使用 commitizen 提交咱們的代碼時,會在終端給出一個交互界面,該界面會提示咱們在提交時所須要填寫的全部字段, 咱們只須要在交互界面中按照順序填寫相應信息 commitizen 會自動幫咱們合成信息,併發起 commit。json
npm install commitizen -g
複製代碼
# 下面面的命令爲你作了下面幾件事:
## 安裝 cz-conventional-changelog npm 模塊
## 將添加 config.commitizen 配置
commitizen init cz-conventional-changelog --save-dev --save-exact
複製代碼
其實到此 commitizen 配置能夠算是基本完成,但若是隻是配置到這裏的話用戶在使用 git cz 來提交代碼時則須要全局安裝 commitizen 不然將會報錯,要想用戶無障礙使用 commitizen 進行提交代碼則能夠在當前項目下安裝 commitizen 並添加 npm 腳本,用戶在未全局安裝 commitizen 的狀況下就能夠經過該 npm 腳原本提交代碼。數組
npm install commitizen -D
複製代碼
"scripts": {
+ "commit": "git-cz"
},
複製代碼
npm run commit
代替 git commit 來提交代碼在使用上文 commit 規範的狀況下, 能夠經過 standard-version 自動生成 change log,並更新項目的版本信息添加 git tag, change log 中將收錄全部 type 爲 feat 和 fix 的 commitbash
npm i --save-dev standard-version
複製代碼
{
"scripts": {
+ "release": "standard-version"
}
}
複製代碼
git checkout master
複製代碼
git pull origin master
複製代碼
git fetch origin --prune
複製代碼
# 下面面的命令爲你作了下面幾件事:
## 修改 package.json 中的版本號
## 使用 legacy -changelog 更新 CHANGELOG.md
## 提交 package.json 和 CHANGELOG.md
## 添加 tag
npm run release -- --release-as 1.0.0
複製代碼
git push --follow-tags origin master
複製代碼