综合 前端代码规范 - Commit 提交规范

2024-11-18 10:18:08 +0800 CST views 575

前端代码规范 - Commit 提交规范

什么是约定式提交?

约定式提交(Conventional Commits)是一种用于代码版本控制的规范,旨在通过标准化提交信息结构,提升代码协作的质量和效率。该规范通过规定提交信息的结构和语义,使代码版本控制的可读性、可维护性和自动化程度得到显著提高。

提交信息的结构

提交信息通常包括以下部分:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
  • 类型:例如 feat(新功能)、fix(修复错误)、docs(文档变更)等。
  • 范围(可选):提交影响的模块或功能。
  • 描述:简短描述提交内容。
  • 正文(可选):对提交的详细描述。
  • 脚注(可选):包含额外的信息,如 BREAKING CHANGE

示例

  1. 描述和破坏性变更的提交

    feat: allow provided config object to extend other configs
    
    BREAKING CHANGE: `extends` key in config file is now used for extending other config files
    
  2. 带有 ! 标识的破坏性变更提交

    feat!: send an email to the customer when a product is shipped
    
  3. 包含范围的提交

    feat(api)!: send an email to the customer when a product is shipped
    
  4. 不包含正文的提交

    docs: correct spelling of CHANGELOG
    
  5. 包含多行正文和多行脚注的提交

    fix: prevent racing of requests
    
    Introduce a request id and a reference to latest request. Dismiss
    incoming responses other than from latest request.
    
    Remove timeouts which were used to mitigate the racing issue but are
    obsolete now.
    
    Reviewed-by: Z
    Refs: #123
    

类型概览

类型描述
feat新增一个功能
fix修复一个 Bug
docs文档变更
style代码格式(不影响功能,例如空格、分号等)
refactor代码重构
perf性能优化
test添加测试
build项目构建或外部依赖的变更
ci更改持续集成配置文件
chore构建过程或辅助工具的变动
revert代码回退

为什么需要约定式提交?

Git 提交信息遵循 Angular 约定可以使提交信息格式更加清晰、易读,从而提高代码协作效率。Angular 约定包含三个部分:

  1. 标题(header):简短描述更改内容,并指定更改类型和影响范围。
  2. 正文(body):提供更详细的更改描述,包括原因、影响和解决方案。
  3. 页脚(footer):提供附加信息,如相关链接、关联的 BUG 编号等。

通过遵循这些约定,团队成员可以更好地理解代码更改的意图,并与自动化工具更好地集成,如自动版本控制、代码审查工具等。

如何遵守约定式提交?

第一步:使用 Commitizen 生成提交说明

Commitizen 是一个命令行工具,帮助开发者生成符合规范的 Git 提交信息。以下是安装和使用步骤:

  1. 全局安装 Commitizen 和 cz-conventional-changelog:

    pnpm install -g commitizen cz-conventional-changelog
    
  2. 创建 .czrc 文件:

    echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
    
  3. 使用 Commitizen 生成提交说明:

    git cz
    

第二步:自定义提交信息

通过 cz-customizable 插件,开发者可以根据项目需求自定义提交信息格式。

  1. 安装 cz-customizable

    npm install cz-customizable --save-dev
    
  2. 添加配置到 package.json

    "config": {
      "commitizen": {
        "path": "node_modules/cz-customizable"
      }
    }
    
  3. 在项目根目录下创建 .cz-config.js 文件自定义提示:

    module.exports = {
      types: [
        { value: ':sparkles: feat', name: '✨ feat: 新功能' },
        { value: ':bug: fix', name: '? fix: 修复' },
        // 其他类型省略...
      ],
      messages: {
        type: '请选择提交的类型:',
        customScope: '请输入修改的范围(可选)',
        subject: '请简要描述提交(必填)',
        body: '请输入详细描述(可选)',
        footer: '请输入要关闭的 issues(可选)',
        confirmCommit: '确认要使用以上信息提交?(y/n)'
      },
      subjectLimit: 72
    };
    

第三步:增加对提交信息的校验

为了确保提交信息符合规范,可以使用 commitlint 进行校验。

  1. 安装 @commitlint/config-conventional@commitlint/cli

    npm i @commitlint/config-conventional @commitlint/cli -D
    
  2. 在根目录创建 commitlint.config.js 文件:

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

进一步提升提交质量:使用 Husky 和 lint-staged

Husky 可以帮助在提交代码前执行格式化、测试等操作,而 lint-staged 可对暂存区代码进行 ESLint 校验和 Prettier 格式化。

  1. 安装 Husky:

    pnpm install husky --save-dev
    
  2. package.json 中配置 Git hooks 和对应的脚本:

    "husky": {
      "hooks": {
        "pre-commit": "npm run lint && npm run test"
      }
    }
    
  3. 安装 lint-staged 并配置:

    npm i lint-staged --save-dev
    

    package.json 中新增配置:

    "lint-staged": {
      "/**/*.{js,jsx,tsx,ts,less,scss,md,json}": [
        "prettier --write"
      ]
    }
    

通过这些步骤,确保提交的信息规范,代码在提交前经过自动化的格式化和校验,从而提高代码质量和团队协作效率。

复制全文 生成海报 代码管理 开发工具 团队协作

推荐文章

2025年,小程序开发到底多少钱?
2025-01-20 10:59:05 +0800 CST
使用 Go Embed
2024-11-19 02:54:20 +0800 CST
api远程把word文件转换为pdf
2024-11-19 03:48:33 +0800 CST
Vue3中哪些API被废弃了?
2024-11-17 04:17:22 +0800 CST
设置mysql支持emoji表情
2024-11-17 04:59:45 +0800 CST
html一些比较人使用的技巧和代码
2024-11-17 05:05:01 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
在JavaScript中实现队列
2024-11-19 01:38:36 +0800 CST
Vue3中的v-model指令有什么变化?
2024-11-18 20:00:17 +0800 CST
服务器购买推荐
2024-11-18 23:48:02 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
Vue3的虚拟DOM是如何提高性能的?
2024-11-18 22:12:20 +0800 CST
JavaScript 实现访问本地文件夹
2024-11-18 23:12:47 +0800 CST
liunx服务器监控workerman进程守护
2024-11-18 13:28:44 +0800 CST
Go 1.23 中的新包:unique
2024-11-18 12:32:57 +0800 CST
go命令行
2024-11-18 18:17:47 +0800 CST
20个超实用的CSS动画库
2024-11-18 07:23:12 +0800 CST
一键配置本地yum源
2024-11-18 14:45:15 +0800 CST
Vue3 组件间通信的多种方式
2024-11-19 02:57:47 +0800 CST
在 Rust 生产项目中存储数据
2024-11-19 02:35:11 +0800 CST
ElasticSearch集群搭建指南
2024-11-19 02:31:21 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
paint-board:趣味性艺术画板
2024-11-19 07:43:41 +0800 CST
15 个你应该了解的有用 CSS 属性
2024-11-18 15:24:50 +0800 CST
程序员茄子在线接单