懒人更新日志生存指南

写在开头:这篇指南不是写给运营的懒人们看的,请继续为更新日志构思狂拽酷炫的排比句吧…

如果项目没有半途而废,更新日志应该是一个和土豪的购物小票一样长的东西。内容一般有两部分(和小票更像了)——版本信息(购买时间)和更新内容(买了什么)。

更新内容

提交信息规定

懒人是不会自己手打更新内容的,所以,为了完成工作,懒人会让同伴帮他写:)

直接扔给同伴写会引起暴力的反抗,懒人想了一下,他可以让同伴每次提交代码的时候,按照他设定好的要求写提交信息,这样内容就很好自动生成了。于是,懒人立了个规矩:Conventional Commits

大致如下:

1
2
3
4
5
6
7
The commit message should be structured as follows:

<type>[optional scope]: <description>

[optional body]

[optional footer]

type要按照懒人说好的类型来,常用的有fix——改bug的时候用,feat——加新功能的时候用,chore——做打杂工作的时候用,docs——编辑文档的时候用,style——优化代码格式(删空格分号骗commit)的时候用。

提交信息检查

要求了这么多,懒人担心同伴一时半会儿记不住。何况,写代码和便秘差不多,通畅后,肯定第一时间想起身走人,万一同伴趁着一时之爽,忘记遵守规定了怎么办。于是,懒人找了个检查工具:commitlint。这个工具负责检查commit message有没有符合之前的规定

懒人一想,好像这还不够。同伴如果忘记了有规定这事儿,肯定想不起用工具做检查。于是,懒人又找了个自动触发工具:husky。husky是简化了对git hooks调用,说白了,就是同伴一提交代码,检查就会执行。提交信息写得合格,通过;不合格,冷静一下,回去重写。

这两个工具很满足懒人的要求,安装也是相当省事儿。

1
2
3
4
5
6
7
8
9
# 安装 husky
npm install --save-dev husky

# 如果用gerrit可以用我的这个版本,不知道gerrit是什么,请忽略
npm install --save-dev husky-gerrit

# 安装并设置commitlint
npm install --save-dev @commitlint/{cli,config-conventional}
echo "module.exports = {extends: ['@commitlint/config-conventional'], rules: {'subject-case': [0]}}" > commitlint.config.js

然后在项目的package.json的scripts里,加入这句话:

1
2
3
4
5
{
"scripts": {
"commitmsg": "commitlint -e $GIT_PARAMS"
}
}

大功告成。

版本信息

懒人看着这么工整清晰的提交信息非常满意,接下来只剩下版本的事了。

语义化版本

版本号是一件让人抓狂的事情,1.1.0、1.1.1和1.2.0有什么关系,实在令人摸不着头脑。懒人希望光看这些数字,就能知道大概做了什么更新。于是,懒人找到了这个——语义化版本

摘要:

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

举个例子,懒人某日突发奇想,有了一个Billion Idea,肝了数个通宵后,他把项目初始版本定为0.1.0。没过多久,他发现代码里有个bug,改完之后,末位版本号加一,版本号变成了0.1.1。后面的几天,他不断在做新功能,版本号从0.1.1变成了0.2.0再到0.3.0。他每给这个项目做一个新功能,中间位就加一,同时末位重置为零。做了一周后,他感觉上周的自己蠢哭了,做了好多没有用的东西,他决定弃掉这些,于是版本号直接变成了1.0.0

生成日志

一切问题看起来都迎刃而解了,终于到了激动人心的时刻,懒人拿出了终极工具——conventional-changelog-cli。这简直是懒人标配,经过简单的安装后,一行命令就可以完成日志生成。

1
2
3
4
5
6
7
8
9
10
11
# 全局安装
npm install -g conventional-changelog-cli

# 进入你的项目文件夹
cd my-project

# 日志初始化
conventional-changelog -p angular -i CHANGELOG.md -s -r 0

# 日志更新
conventional-changelog -p angular -i CHANGELOG.md -s

懒人嫌上面命令好难记,所以他把更新日志的命令放到了npm script里。在项目的package.json的scripts里,加入这句话:

1
2
3
4
5
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
}
}

以后再需要更新日志,直接执行npm run changelog就好了。

懒人万岁!

推荐工作流

这是懒人日常的一天:

  1. 写代码
  2. 提交写的代码
  3. 使用持续集成工具(Travis)确定代码的正确性
  4. 更新package.json中的版本号
  5. 运行npm run changelog
  6. 提交package.jsonCHANGELOG.md文件
  7. git打版本
  8. git push

(本文完)

0%