项目需要写版本信息时有对除了版本号之外更详细的 changelog 的展示, 于是就需要在平时的 git commit 中进行规范, 才能自动生成CHANGELOG.md.

Husky

首先本地安装 husky yarn add husky -D, 相信做过 lint 的同学一定接触过 husky ,有着丰富的钩子. 其中 pre-commit就可以对代码进行 lint 检查, 避免 lint 的错误被上传.

  1. {
  2. "scripts": {
  3. "lint": "vue-cli-service lint --fix"
  4. },
  5. "husky": {
  6. "hooks": {
  7. "pre-commit": "yarn lint && git add ."
  8. }
  9. }
  10. }

如果使用的是 vue 的脚手架, 其中内置了GitHook, 用的是yorkie这个库, fork 自 husky. 可按需使用.

总之, 自动化就是需要我们往流程里加一些控制命令, 以按照我们的需求实现. 那么 husky 就是很好的控制流程工具, 仅此而已, 具体要怎么做还需要调用其他依赖模块.类似摩登时代里面的流水线, 老板安排卓别林去流水线某个地方去拧螺丝, 但是螺丝怎么拧还得看卓老的, 下面就是螺丝工人们.

Commitizen

完成后全局安装 commitizen

yarn global add commitizen

会在使用 git cz开始提交时被触发, 可以按照模板书写适合生成 CHANGELOG 的 commit, 这样才可以通过下面的 commitlint 工具

你可以理解为就是一个格式化 commit 的东西.

安装完成后在项目根目录下使用

commitizen init cz-conventional-changelog --yarn --dev --exact

配置commitizen, 会在package.json 中添加commitizen路径

  1. {
  2. "config": {
  3. "commitizen": {
  4. "path": "./node_modules/cz-conventional-changelog"
  5. }
  6. }

Commitlint

这是检查 commit-msg 是否符合标准, 那么什么是标准呢? js 有 eslint, 那么 commit 就有 commitlint, 需要安装@commitlint/cli commitlint 的 命令行控制台, 用来传递 commit-msg 给标准 --> @commitlint/config-conventional

yarn add @commitlint/cli @commitlint/config-conventional -D

类似 eslint.config.js一样需要对 commitlint做配置. 新建一个commitlint.config.js

  1. module.exports = {
  2. extends: ['@commitlint/config-conventional']
  3. };

然后在 husky 的 hooks 中添加对应命令. 记住, 这是螺丝工, husky 是流水线.

  1. {
  2. "husky": {
  3. "hooks": {
  4. "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  5. }
  6. }
  7. }

至此, 我们之后的所有 commit msg 都会符合 commitlint 的标准. 也就意味着可以自动生成有语义的 CHANGHELOG, 那么材料(commit msgs)有了, 来自动化加工出 CHANGELOG 吧.

standard-version

standard-version 可以使用脚本生成 CHNAGELOG, 并且更新版本号, 如果有需要还可以创建 tag. 详情就看文档按需去自定义了.

  1. yarn add standard-version -D

安装完成之后, 创建一个发布脚本.

  1. {
  2. "script": {
  3. "release": "standard-version"
  4. }
  5. }

在 git status clean 的时候使用

yarn release

就会生成一个 CHANGELOG.md, 并更新版本号.

快去试试吧.

以上内容都是 yarn 版本, 一下是npm 的版本:

package.json 的配置一样:

  1. {
  2. "name": "Haha",
  3. "version": "0.1.0",
  4. "private": true,
  5. "scripts": {
  6. "lint": "vue-cli-service lint --fix",
  7. "release": "standard-version",
  8. "c": "git add . && git cz"
  9. },
  10. "dependencies": {
  11. },
  12. "devDependencies": {
  13. "@commitlint/cli": "^8.2.0",
  14. "@commitlint/config-conventional": "^8.2.0",
  15. "cz-conventional-changelog": "3.0.2",
  16. "husky": "^3.1.0",
  17. "standard-version": "^7.0.1"
  18. },
  19. "husky": {
  20. "hooks": {
  21. "pre-commit": "yarn lint && git add .",
  22. "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  23. }
  24. },
  25. "config": {
  26. "commitizen": {
  27. "path": "./node_modules/cz-conventional-changelog"
  28. }
  29. }
  30. }

指令:

  1. // 安装全局依赖
  2. npm install --global commitizen
  3. // 安装项目依赖
  4. npm install --save-dev standard-version husky @commitlint/config-conventional @commitlint/cli
  5. // 配置 commitizen
  6. commitizen init cz-conventional-changelog --save-dev --save-exact
  7. // 生成 CHANGELOG
  8. npm run release

CHANGELOG 的实现的更多相关文章

  1. jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)

    问题原因 changelog的获取方式(git-client插件): 首先调用git whatchanged命令,读取输出字节流(UTF-8编码的Commit Message). 将字节流解码为字符串 ...

  2. 【PHP】PHP5.4.0版本号ChangeLog具体解释(上)

    前言 随着大量的框架使用composer和namespace,渐渐的线上环境也从之前的5.3变成了5.4或者5.5甚至5.6,随着7月份PHP7的公布,会有很多其它的公司採用新版本号. 之前好久就想写 ...

  3. 根据Eclipse SVN changelog使用ANT自动打增量包

    1.获取changeLog 用eclipseSVN的插件功能查看history. 将日志文件导出到本地文件svn_change.log,格式如下 r63 | xiaodaoshi | 2014-08- ...

  4. 利用shell脚本生成CHANGELOG.md(包含git提交规范)

    前言 我们经常看到github上面有很多CHANGELOG.MD包含版本的更新信息,如果我们的git提交能遵循一定的规范,那么使用gitlog就能很方便的生成它 生成结果  shell脚本 http ...

  5. 自动生成CHANGELOG.md

    $ npm install -g conventional-changelog-cli $ cd my-project $ conventional-changelog -p angular -i C ...

  6. Jenkins ChangeLog

    Log changes in Jenkins - Stack Overflowhttps://stackoverflow.com/questions/13631145/log-changes-in-j ...

  7. Jenkins Git Changelog Plugin

    https://wiki.jenkins.io/display/JENKINS/Git+Changelog+Plugin

  8. git使用总结(包含git commit message 和 changelog 工具的介绍)

    [git的配置] 1.配置用户名和邮箱: 分为全局配置和局部配置 --system 系统配置  --global 全局配置    --local 局部配置 Git读取时:优先从local>glo ...

  9. 关于Mantis变更日志(Changelog)和路线图(Roadmap)的说明

    变更日志(Changelog):是已经修改好了问题的日志,需要给项目添加版本号,并且在添加/解决问题时都指定了相应的版本号,才会显示. 路线图(Roadmap):是计划在某个版本修改某些问题的日志,需 ...

  10. git commit 、CHANGELOG 和版本发布的标准自动化

    一直以来,因为团队项目迭代节奏很快,每次发布的更新日志和版本更新都是通过人肉来完成的.有时候实在忙的团团转,对于手动的写这些更新信息就显得力不从心了.对于团队新来的小伙伴,有时候遇到些紧急情况,就更显 ...

随机推荐

  1. nginx upstream 容错机制

    熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...

  2. matlab 提取图像轮廓(图像边缘提取)

    利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...

  3. Apache Jmeter教程(一) - 入门

    一.下载Jmeter 登录官网Jmeter下载,得到压缩包jmeter-5.0.tgz,下载地址:http://jmeter.apache.org/download_jmeter.cgi. 二.安装 ...

  4. 【首发】uExitCode解释

    uExitCode 进程退出码,一般设置为0,不是的话也没有错误. 它的主要作用是,通知调用这个程序的其他程序退出的原因. 以前在dos下可能用的较多,现在windows下用的很少,而且windows ...

  5. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  6. Jquery对表单、表格的操作以及应用

    表单的应用 (1)表单标签:包含处理表单数据所用的服务器端程序URL以及数据提交到服务器的方法 (2)表单域:包含文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择框.和文件上传框 (3)表 ...

  7. [CF132C] Logo Turtle

    [CF132C] Logo Turtle , Luogu A turtle moves following by logos.(length is \(N\)) \(F\) means "m ...

  8. jdk1.8 -- 自定义FunctionInterface

    一.自定义函数的理解 对于java提供的一些函数,用lambda表达式是可以解决一些问题的,但是在对于一些比较复杂的数据类型在处理时,可能会有些力不从心了,但是 我们可以通过自定义的一些函数,通过使用 ...

  9. java日志框架系列(3):logback框架配置详解

    1.Logback配置 1.配置步骤及默认配置 logback即可以通过编程式配置,也可以通过xml的形式配置. logback配置步骤: 1. 尝试在 classpath 下查找文件 logback ...

  10. vue—生命周期的基本介绍

    Vue生命周期: 什么是生命周期: Vue 实例从创建到销毁的过程,就是生命周期.也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期 ...