Angular标准 commit message 提交信息、commit 验证、standard-version 自动版本更替和 changelog 输出

辅助提交工具

因为要使用 commitizen 工具来辅助提交信息填写

npm install commitizen -g

进而需要先安装 node 环境

使用

在项目目录下

# 需要先 npm init
commitizen init cz-conventional-changelog --save --save-exact

使用 git cz 进行提交
会弹出规范进行一系列的输入

现在好像存在更轻巧的库 git-cz

具体规范标准

Commit message 包括三个部分:Header,Body 和 Footer

<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>

注:Body 和 Footer 为可选内容

type

type 含义
feat 新增功能
fix 修复bug
docs 修改文档
refactor 代码重构,未新增任何功能和修复任何bug
build 改变构建流程,新增依赖库、工具等(例如webpack修改)
style 仅仅修改了空格、缩进等,不改变代码逻辑
perf 改善性能和体现的修改
chore 非src和test的修改
test 测试用例的修改
ci 自动化流程配置修改
revert 回滚到上一个版本

scope

用于说明 commit 影响的范围,比如数据层、控制层、视图层、包名、文件名等等。

subject

是 commit 目的的简短描述,不超过50个字符,结尾不加句号。

Body

Body 部分是对本次 commit 的详细描述,应该说明代码变动的动机,以及与以前行为的对比。

Footer

  1. 是否有重大的改变(是否有突破性的变化)
    框架式改变,或者跟上一版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
  2. 这一变化是否影响到任何尚未解决的问题(关闭issue)
    可以填写fix #1 等于关闭问题1 或者 使用Closes #1,关闭多个issue使用fix #1,#2,#3 逗号分割,关闭了三个issue。

强制验证提交信息

yorkie用于执行git-hooks

npm install --D yorkie
// package.json
"gitHooks": {
    "commit-msg": "node git-hooks/verify-commit-msg.js"
}

verify-commit-msg.js

const chalk = require('chalk')
const msgPath = process.env.GIT_PARAMS
const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()

const commitRE = /^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` +
    chalk.red(`  Proper commit message format is required for automated changelog generation. Examples:\n\n`) +
    `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
    `    ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` +
    chalk.red(`  You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`)
  )
  process.exit(1)
}

自定义gitHooks

standard-version 自动化版本控制

版本号 major.minor.patch
版本更新规则:

  • feature 会更新 minor,
  • bug fix 会更新 patch,
  • BREAKING CHANGES 会更新 major

conventional-changelog-cli 生成 change log

cz-conventional-changelog 可以自动根据提交信息生成change log

$ npm install -g conventional-changelog-cli

执行

# 在之前生成的基础上,叠加
$ conventional-changelog -p angular -i CHANGELOG.md -s
# 生成所有记录,包括之前的
$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0

这个方法需要我们手动打 tag,才会输出版本和变化对应关系
默认 angular 只输出 feat 和 fix
自定义配置

npm i conventional-changelog-custom-config -D

命令也要修改

conventional-changelog -p angular -i CHANGELOG.md -s -r 0

配置输出项
并没有达到理想效果,没有显示额外内容,格式也没了
custom-config

使用 standard-version 自动version 自动tag

参考

npm install -D standard-version

可在 package.json 中添加 scripts

"scripts": {
  "release": "standard-version"
}

对导出 CHANGELOG.md 信息的配置
创建 .versionrc 文件,内容如下:

{
  "types": [
    {"type": "chore", "section":"Others", "hidden": false},
    {"type": "revert", "section":"Reverts", "hidden": false},
    {"type": "feat", "section": "Features", "hidden": false},
    {"type": "fix", "section": "Bug Fixes", "hidden": false},
    {"type": "docs", "section":"Docs", "hidden": false},
    {"type": "style", "section":"Styling", "hidden": false},
    {"type": "refactor", "section":"Code Refactoring", "hidden": false},
    {"type": "perf", "section":"Performance Improvements", "hidden": false},
    {"type": "test", "section":"Tests", "hidden": false},
    {"type": "build", "section":"Build System", "hidden": false},
    {"type": "ci", "section":"CI", "hidden":false}
  ]
}

你可能感兴趣的:(web前端,git,node.js)