该章节主要是对下文内容的概括方便日后的查阅,若是须要了解细节部分请从第二章节开始阅读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
复制代码