如何使用工具规范前端项目的commits与changelog技巧

目录
  • 前言
  • Conventional Commits 规范
  • 对于简短描述的扩充填写,可选
  • 哪些工具可以组合起来规范我们的 commit?
    • Commitizen
    • cz-customizable
    • commitlint
    • standard-version
  • 安装配置
    • 1. 安装 commitizen 和 cz-customizable
    • 2. 安装 commitlint
    • 3. 安装 standard-version
  • 总结

前言

项目的 Changelog 文件作为记录版本之间的差异和变更的主要“公示板”,主要用于传达一些关键的变更和指南,是直接与使用者对话的一种形式,所以 changelog 文件的整洁、直观一直是衡量一个项目质量的重要指标。

而且在我们翻阅一些组件库或者开源框架的 changelog 变动页的时候,经常看到一些项目的整齐、直观、井井有条如下面示例。这样的 log 日志必然不是手动排版出来的,大部分都是根据 commit 的描述自动生成的。

那么它们是如何配置,或者使用了什么工具包呢?想必大家都比较好奇。接下来我们就来一步一步揭开它神秘的面纱,并一步步的配置我们的组件库的 commit 规范,使我们的 commit 和 changelog 文件也能如此优雅。

示例一:semi 的 changelog 文件

示例二:antd 的 github changelog

Conventional Commits 规范

要保持 commit 信息的可读性,一个合理的 commit 格式规范是必不可少的,而 Conventional Commits 就是一种基于提交消息的轻量级约定。官方是这样描述它的:

它提供了一组用于创建清晰的提交历史的简单规则; 这使得编写基于规范的自动化工具变得更容易。 这个约定与SemVer相吻合, 在提交信息中描述新特性、bug 修复和破坏性变更。 --- Conventional Commits 官网

由此可以看出 Conventional Commits 是一个非常友好且清晰的规范,那遵循它的好处有哪些? 我们来进行一个总结:

  • 可格式化信息,自动产生 changelog;
  • 校验拦截不符合规则的 commit 描述;
  • 根据类型决定当前版本变更的性质;
  • 统一提交信息,有利于代码审查者的阅读。

那么 Conventional Commits 规则到底是如何的呢,我们接着往下看。通过官网的文档可以发现,它提交说明的结构如下所示:

<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
举例:
fix(docs): 修复文档中字符错误
feat(components): tooltip 组件初始化

可以看到,结构里面包含类型、作用域、描述、正文、脚注。

  • 类型:用来标示当前提交是一个什么样的类型,比如最常见的有 fixfeat 等,用来标示当前的提交是一个修复类的操作,或者一个新功能的增加。可枚举的类型还有:choredocsstylerefactorperftest 等。这块可以参照 @commitlint/config-conventional 里面的枚举值。
  • 作用域:此字段可自行定义枚举值,根据业务模块划分即可,比如:当前是【文档】的改动就可以填写 docs;当前影响了 utils 库,就可以填写 feat(utils):等等,取值不限制。
  • 描述:描述就是对当前 commit 的简短描述,尽量简短,清晰。

对于简短描述的扩充填写,可选

  • 脚注:包含关于提交的元信息,比如:有关联的请求url、cr人员、等等一些关键性信息。
  • 特别需要注意的是:在可选的正文或脚注的起始位置带有 BREAKING CHANGE: 的提交,表示引入了破坏性 API 变更(这和语义化版本中的 MAJOR 相对应)。 破坏性变更可以是任意类型提交的一部分。

可以看出 Conventional Commits 规范非常高效且上手难度很低,并且 Conventional Commits 已经被很多知名的开源项目所集成,是一个被大家广泛接受的标准。而我们的组件库也需要遵循它来规范我们的 commit。

要如何遵循此规范呢?用插件来约束我们的 commit 是一个比较好的解决方案。接下来,我们来看下有哪些插件可以让我们愉快的使用。

哪些工具可以组合起来规范我们的 commit?

Commitizen

上面我们说到了 Conventional Commits 规范,我们要遵循此规范时,可能手动去处理 commit 信息会比较繁琐,并且出错率也很高,比如在我们书写 fix(scope): xxx 时,很容易对于符合的全角还是半角输入法搞混,这样很容易造成信息格式化的失败。那么我们该如何高效稳定的遵循 Conventional Commits 规范呢?Commitizen 应声而来。

Commitizen 可以说是一个交互性日志提交工具,用于辅助开发者提交符合规范的 commit 信息。它可以说是提供了“保姆式”的提交体验,在我们触发 commit 的脚本后,只需要根据提示来选择我们的提交信息,就可以生成一个符合规范的 commit。

? Select the type of change that you're committing: (Use arrow keys)
❯ feat:     A new feature
  fix:      A bug fix
  docs:     Documentation only changes
  style:    Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  refactor: A code change that neither fixes a bug nor adds a feature
  perf:     A code change that improves performance
  test:     Adding missing tests or correcting existing tests
(Move up and down to reveal more choices)

cz-customizable

cz-customizable 作为一个用于自定义 Commitizen 的扩展插件,可以在原生 Commitizen 的标准上,根据配置文件来自定义我们的提交规范。可以说是用来扩展 Commitizen 的神器。一般都用于 Commitizen 的配套使用。

? 选择一种你的提交类型: (Use arrow keys)
❯ feat :    新增新的特性
  fix :    修复 BUG
  docs :    修改文档、注释
  refactor :    代码重构,注意和特性、修复区分开
  perf :    提升性能
  test :    添加一个测试
  tool :    开发工具变动(构建、脚手架工具等)
(Move up and down to reveal more choices)

commitlint

commitlint 用来校验检查我们的提交 commit 是否符合conventional commit format。类似于 eslint,commitlint 可以根据我们的配置文件或者默认的选项值来校验我们的 commit 信息,不通过的校验会被直接打回。

standard-version

standard-version 是一款遵循语义化版本(semver)和 commit message 标准规范的版本自动化工具,它还可以使生成 changelog 自动化。并且将我们符合 Conventional Commits 规范的提交信息格式化,并完成以下操作:

  • 根据现在 package.json 文件中的 版本号 version 进行 commit 的整合。并更新 changelog 文件。
  • 提交暂存文件 git add . 。
  • git commit 。
  • 打标签 git tag。

总体来说,它帮助我们自动化的进行了发版所需要的步骤,并且根据 commit 信息,生成 log 日志。这样我们就只需要专注于我们的逻辑开发,其他的都可以交给 standard-version 去完成。

以上是我们规范 commit 信息、根据提交的 commit 信息自动化更新 changelog、发版等一条龙服务所必须用到的插件。经过简单的熟悉后,我们来进行实际的配置,让我们组件库的 commit 优美起来。

安装配置

俗话说的好,动手是第一生产力。接下来我们将一步步安装配置我们的 commit 规范。

1. 安装 commitizen 和 cz-customizable

pnpm install -D commitizen cz-customizable

在最外层 package.json 文件中添加脚本命令和配置项,使 commitizen 使用cz-customizable 插件。

{
  ...
  "scripts" : {
    ...
    "commit": "git cz"
  }
  ...
  "config": {
    "commitizen": {
      "path": "cz-customizable"
    }
  }
}

接下来在根目录新建 .cz-config.js 文件,并加入我们的汉化配置。

 // .cz-config.js module.exports = {
    types: [
        { value: "feat", name: "feat :    新增新的特性" },
        { value: "fix", name: "fix :    修复 BUG" },
        { value: "docs", name: "docs :    修改文档、注释" },
        { value: "refactor", name: "refactor :    代码重构,注意和特性、修复区分开" },
        { value: "perf", name: "perf :    提升性能" },
        { value: "test", name: "test :    添加一个测试" },
        { value: "tool", name: "tool :    开发工具变动(构建、脚手架工具等)" },
        { value: "style", name: "style :    对代码格式的修改不影响逻辑" },
        { value: "revert", name: "revert                         
(0)

相关推荐

  • 使用Vite从零搭建前端项目的详细过程

    目录 一.环境搭建 二.初始化项目 一.环境搭建 首先,请确保已经安装了代码编辑器和浏览器,如果没有安装推荐安装VSCode和Chrome浏览器. 其次是安装 Node.js,如果你的系统中还没有安装 Node.js ,可以进入 Nodejs 官网下载相应的安装包进行手动安装:如果已经安装了 Node.js,你可以使用这个命令检查一下 Node.js 版本. node -v 如果安装了多个版本的Node.js,推荐使用 nvm 工具切换 Node.js 版本.安装完 Nodejs 之后,包管理器

  • vue前端项目打包成Docker镜像并运行的实现

    目录 vue前端项目打包成Docker镜像并运行 前端将vue打包成镜像发布 一.总体预览 二.打包配置 三.问题思考 vue前端项目打包成Docker镜像并运行 首先说明咱们的前端项目是基于Vue的,反向代理使用的是nginx 1.打包vue前端项目生成dist文件夹上传至服务器 新建一个文件夹,叫vueDockerTest,下面的文件都需要. cert是你存放ssl证书的文件夹,nginx.conf 是nginx的配置文件,dist是你打包的前端静态文件 2.修改Dockerfile文件 #

  • 一篇文章快速掌握Nginx部署前端项目(Nginx安装配置及部署都非常详细!)

    目录 前言: Nginx的三个作用: 负载均衡: 反向代理: 动静分离: Nginx的下载安装(Linux环境下) Nginx的使用 三.部署前端项目 总结 前言: 之前在Linux系统中部署了后端项目,今天继续来给大家分享如何部署前端项目. 涉及到了Nginx的简单介绍以及Nginx如何安装及配置并且能够部署前端项目 Nginx是一个轻量级的反向代理web服务器,在当今应用地非常广泛,特别是前后端分离的情况下. Nginx的三个作用: 负载均衡: 当我们的单个项目访问量达到了单个tomcat无

  • Java Web项目前端规范(采用命名空间使js深度解耦合)

    没有规矩不成方圆,一个优秀的代码架构不仅易于开发和维护,而且是一门管理与执行的艺术. 这几年来经历了很多项目,对代码之间的强耦合及书写不规范,维护性差等问题深恶痛绝.在这里,通过仔细分析后,结合自己的编码习惯总结了一套适用于javaweb项目的前端书写规范,与大家分享一下. ps:感谢阿海的创意,后期整理如下(附文件下载): 一.项目结构 这里和其他项目区别不大,我将模板抽离出来,更容易分析和理解: 解释一下:js主要包括extends(引入第三方的js).module(项目模块自己的js).l

  • 部署Go语言项目的 N 种方法(小结)

    本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法. 部署Go语言项目 本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法. 独立部署 Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 Mac 平台下编写代码,并且将代码编译成能够在 Linux amd64 服务器上运行的程序. 对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务器上,然后设置为后台守护进程运行即可.

  • 使用VS2019编译CEF2623项目的libcef_dll_wrapper.lib的方法

    编译环境:VS2019 + Win10 + cmake-gui-3.8.0 + cef_binary_3.2623.1401.gb90a3be_windows32 最后一个兼容Windows XP的CEF(2623)的下载地址: 链接: https://pan.baidu.com/s/1U82l-LxgCikktaUA5-jdPw 提取码: pkt6 1.解压 cef_binary_3.2623.1401.gb90a3be_windows32 后,目录如下: 2.下载cmake-gui 链接:

  • Spring Boot web项目的TDD流程

    目录 概述 1 技术工具 2 构建Spring Boot工程 3 开始编写测试和代码 1 Controller 2 Service 3 Repository 4 总结 概述 测试驱动开发可以分为三个周期,周而复始,红灯-绿灯-重构.由以下几个步骤构成: 编写测试 运行所有测试 编写代码 运行所有测试 重构 运行所有测试 一开始编写测试,肯定通不过,红灯状态,进行代码编写,然后运行测试,测试通不过,测试通过,即变成绿灯. 测试不通过,或者需要重构代码,再次运行所有测试代码... 接下来通过一个简单

  • 建立和维护大型 Vue.js 项目的 10 个最佳实践

    目录 1.使用插槽(slot)使组件更易于理解并且功能更强大 2.正确组织您的 Vuex 存储 3.使用操作(Vuex Actions)进行 API 调用和提交数据 4.使用 mapState,mapGetters,mapMutations 和 mapAction 简化代码库 5.使用 API 工厂 6.使用 $config 访问您的环境变量(在模板中特别有用) 7.遵循一个约定来写提交注释 8.始终在生产项目时冻结软件包的版本 9.显示大量数据时使用 Vue 虚拟滚动条 10.跟踪第三方程序包

  • 关于Spring Boot项目的 log4j2 核弹漏洞问题(一行代码配置搞定)

    看到群里还有小伙伴说公司里还特别建了800+人的群在处理... 好在很快就有了缓解措施和解决方案.同时,log4j2官方也是速度影响发布了最新的修复版本.各应用方也可以执行较为稳定的修复方案了. 不过我看到群里发出来的各种修复方法,还真是不好看...所以这里也提一下Spring Boot用户怎么修复最简单吧. 最简修复方式 有些小伙伴其实想到了直接通过Spring Boot的Starter去解决,所以还给Spring Boot提了Issue,希望spring-boot-starter-log4j

  • 创建Web项目的Docker镜像实例讲解

    最近做个项目,创建web项目的Docker镜像,经过一番折腾终于做出来了,这里记录下,也希望读者能少走点弯路!以下就是资料整理! 基于Java,Mongodb,Tomcat的Supplierprofile项目 禁用selinux vi etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted 运行镜像 Docker run -i --privileged=true -v /home/centos:/usr/local/file -d -p

  • 解决vue-cli创建项目的loader问题

    在使用vue-cli项目创建项目中,使用sass等预编译css语言时,不需要在config中配置,只需要在项目中安装相应loader即可. 例如: 1.在项目中使用sass $ npm i node-sass -D $ npm i sass-loader -D 2.当使用vuex时,即使安装vux和vux-loader,在项目中使用了vux的组件,项目就无法启动,报错如下: These dependencies were not found: * !!vue-style-loader!css-l

  • java模拟ajax访问另一个项目的controller代码实例

    不同项目,如何java模拟ajax访问另一个项目的controller 直接上码 package com.ultrapower.zq.iscloud.web.boc.api.utils; /** * create by liujie */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import ja

  • SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)

    关于logback日志的详解见这位仁兄的博客:Spring Boot-日志配置(超详细) 我在这就开门见山直接介绍我们项目日志的配置使用吧!~ 1.基本介绍 默认情况下,Spring Boot项目就会用Logback来记录日志,并用INFO级别输出到控制台.如下图: 实际开发中我们不需要直接添加logback日志依赖. 你会发现 spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 lo

  • Java修改eclipse中web项目的server部署路径问题

    和MyEclipse不一样,在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中的服务器,才能运行Web项目.所以要对Eclipse进行修改,才能将做好的项目,发布到Tomcat服务器上,发布到服务器上的Webapps文件夹下. 在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata\.plugins\org.eclipse.wst.serv

随机推荐