git cz代码提交规范,适用于node14以上

1.效果

3. 在项目中如何添加

3.1 安装(只提供npm安装方式)全局安装 commitizen 

 npm i -D commitlint @commitlint/config-conventional commitizen cz-git

 

3.2 配置模版

在项目的根目录下配置添加文件 commitlint.config.js 并写入如下代码

/** @type {import('cz-git').UserConfig} */
// eslint-disable-next-line no-undef
module.exports = {extends: ['@commitlint/config-conventional'],rules: {// @see: https://commitlint.js.org/#/reference-rules// 'header-max-length': [0, 'always', 72],// type 类型定义,表示 git 提交的 type 必须在以下类型范围内'type-enum': [2,'always',['feat', // 新功能开发'fix', // Bug修复'refactor', // 重构(refactoring production code)'style', // 代码排版格式修改,比如行尾添加分号等'docs', // 文档修改'build', // 构建流程或依赖管理等修复'ci', // ci相关的修改'test', // 测试用例补充、修改或重构'perf', // 性能优化'revert', // 回滚'chore', // 杂务,对外部用户不可见的工具、配置等的修改,如修改.gitignore]]},prompt: {messages: {type: '请选择提交类型:',scope: '本次提交的影响范围 (可选):',customScope: '本次提交的影响范围:',subject: '请简要描述提交(必填):',body: '请输入详细变更 (可选). 使用 "|" 换行:\n',breaking: '本次提交列出破坏性改动 (可选). 使用 "|" 换行:\n',footerPrefixsSelect: '本次提交修复的issue (可选):',customFooterPrefixs: '请输入issue前缀:',footer: '本次提交修复的issue. 例如.: #31, #34:\n',confirmCommit: '确认使用以上信息提交?(y/n)'},types: [{ value: 'feat', name: 'feat:新功能开发', emoji: ':sparkles:' },{ value: 'fix', name: 'fix:Bug修复', emoji: ':bug:' },{value: 'refactor',name: 'refactor:重构(refactoring production code)',emoji: ':recycle:'},{ value: 'style', name: 'style:代码排版格式修改,比如行尾添加分号等', emoji: ':lipstick:' },{ value: 'docs', name: 'docs:文档修改', emoji: ':memo:' },{value: 'build',name: 'build:构建流程或依赖管理等修复',emoji: ':package:'},{ value: 'ci', name: 'ci:ci相关的修改', emoji: ':ferris_wheel:' },{value: 'test',name: 'test:测试用例补充、修改或重构',emoji: ':white_check_mark:'},{ value: 'perf', name: 'perf:性能优化', emoji: ':zap:' },{ value: 'revert', name: 'revert:回滚', emoji: ':rewind:' },{ value: 'chore', name: 'chore:杂务,对外部用户不可见的工具、配置等的修改,如修改.gitignore', emoji: ':hammer:' },],useEmoji: true,emojiAlign: 'center',themeColorCode: '',scopes: [],allowCustomScopes: true,allowEmptyScopes: true,customScopesAlign: 'bottom',customScopesAlias: 'custom',emptyScopesAlias: 'empty',upperCaseSubject: false,markBreakingChangeMode: false,allowBreakingChanges: ['feat', 'fix'],breaklineNumber: 100,breaklineChar: '|',skipQuestions: ['scope', 'customScope', 'body', 'breaking', 'footer', 'footerPrefix', 'customFooterPrefixs'],issuePrefixs: [{ value: 'closed', name: 'closed:   ISSUES has been processed' }],customIssuePrefixsAlign: 'top',emptyIssuePrefixsAlias: 'skip',customIssuePrefixsAlias: 'custom',allowCustomIssuePrefixs: true,allowEmptyIssuePrefixs: true,confirmColorize: true,maxHeaderLength: Infinity,maxSubjectLength: Infinity,minSubjectLength: 0,scopeOverrides: undefined,defaultBody: '',defaultIssues: '',defaultScope: '',defaultSubject: ''}
};

3.3 修改packjson文件

script同级

"config": {"commitizen": {"path": "node_modules/cz-git"}}

3.4 使用方式

在每次 git add filename之后使用 git cz 就会提示 commit的规范

3.5 commit的校验规则

此时还不并不能自动校验commit的规则,需要进行如下操作才行,本操作需要使用node 14以上的版本,在 node 14以下会出现如下问题:

internal/process/esm_loader.js:74internalBinding('errors').triggerUncaughtException(^Error [ERR_UNKNOWN_BUILTIN_MODULE]: No such built-in module: node:timers/promisesat Loader.builtinStrategy (internal/modules/esm/translators.js:285:11)at new ModuleJob (internal/modules/esm/module_job.js:59:26)at Loader.getModuleJob (internal/modules/esm/loader.js:257:11)at async ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:74:21)at async Promise.all (index 1)at async link (internal/modules/esm/module_job.js:79:9) {code: 'ERR_UNKNOWN_BUILTIN_MODULE'
}

4.解决方案来自于Support Node 14 #428,建议使用高版本的node

1. 添加挂钩

安装husky

npm install --save-dev husky

2. node v16中初始化 husky

  • packjason.jsonscripts中添加

初始化husky

"prepare""husky install"

  • 添加 commit-msg检测方法

添加commitlint (windows中添加方式可能不一样)

# Add commit message linting to commit-msg hook

echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg


此时不符合规范的提示就是

commitlint不通过

⧗   input: xxx

✖   subject may not be empty [subject-empty]

✖   type may not be empty [type-empty]

✖   found 2 problems, 0 warnings

ⓘ   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

husky - commit-msg script failed (code 1)


作为替代方案,您可以在内部创建一个脚本package.json
 

另一种添加commitlint方式

npm pkg set scripts.commitlint="commitlint --edit"

echo "npm run commitlint \${1}" > .husky/commit-msg

3. node v20中初始化 husky
  • packjason.jsonscripts中添加

初始化husky

npx husky init

  • 删除默认自带的 pre-commit 文件,文件里面是有个npm testpre-commit文件可以做一些前置校验,如eslint、pretty、ts的校验等, 文件路径是.husky/pre-commit

  • 添加 commit-msg检测方法

commit校验规则

# Add commit message linting to commit-msg hook

echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg


作为替代方案,您可以在内部创建一个脚本package.json
 

添加commitlint

npm pkg set scripts.commitlint="commitlint --edit"

echo "npm run commitlint \${1}" > .husky/commit-msg


此时不符合规范的提示就是

commitlint校验不通过提示

⧗   input: xxx

✖   subject may not be empty [subject-empty]

✖   type may not be empty [type-empty]

✖   found 2 problems, 0 warnings

ⓘ   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

4. 测试钩子函数在每次 git commit的时候,会自动检测commit中的内容是否含有以上的关键词,如果没有则会提示

需用使用者直接修改commit之后再提交,虽然可以人为的去在commit中使用以上关键词,但是不建议这样使用,为了保持大家格式统一,要求使用git cz代替git commit。

在每次 git commit的时候,会自动检测commit中的内容是否含有以上的关键词,如果没有则会提示
 

校验不通过的提示

⧗ input: xxx

✖ subject may not be empty [subject-empty]

✖ type may not be empty [type-empty]

✖ found 2 problems, 0 warnings

ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

error Command failed with exit code 1.

info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

husky - commit-msg script failed (code 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392050.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 类型转换

隐式&#xff08;implicit&#xff09;类型转换 1.不丢失精度的转换 2.显示&#xff08;explicit&#xff09;类型的转换 有可能丢失精度的转换 使用convert转换 ToString方法&#xff1a;将数值类型转换成字符串型

PDF密码移除技巧: 五大 PDF 密码移除器

如果您想解密或删除 PDF 密码&#xff0c;该怎么办&#xff1f;PDF 是一种经常用于商业的格式&#xff0c;您可以在培训、教育和商业场合使用它。添加这些 PDF 文件的密码可以保护您的安全和隐私。因此&#xff0c;有很多 PDF 都用密码加密&#xff0c;当您想要查看这些 PDF 时…

吃透张宇1000题和660题,能保底100分吗?

暑假已经过一半了&#xff0c;很多人都在埋头做题&#xff0c;如果你选择的是1000题660题 一定要好好看这篇笔记&#xff01; 因为很多人做题做到现在&#xff0c;有点迷茫 主要的迷茫点有三个&#xff1a; 1、为什么1000题和660题也都做不少了&#xff0c;遇到新题&#x…

RS485 芯片SN65HVD72DR导致的死机问题调试

最近再一次栽倒在这颗RS485 芯片上了&#xff0c;硬件说这和芯片功耗有点高&#xff0c;要控下电源, 结果10次有9次程序死机&#xff01; 先上图&#xff0c;请各位高手看看&#xff0c;这电路有问题没有&#xff1f; 为什么我会说是RS485 芯片导致的死机&#xff1f;因为 只要…

ai自动配音工具

AI拟音大师&#xff0c;给你的无声视频添加生动而且同步的音效 &#x1f61d;文件夹是一种基于文本的视频到音频生成框架,可以生成高质量的音频,在语义上相关,并与输入视频时间同步。 下载地址&#xff1a;https://pan.quark.cn/s/5a2be1cc5551

被工信部认可的开源软件治理解决方案

近日&#xff0c;工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”&#xff0c;开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选&#xff0c;成为经工信部认可的优秀解决方案&#xff0c;这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

基于强化学习的Deep-Qlearning网络玩cartpole游戏

1、环境准备&#xff0c;gym的版本为0.26.2 2、编写网络代码 # 导入必要的库 import gym import torch import torch.nn as nn import torch.optim as optim import numpy as np from collections import deque import random# 定义DQN网络 class DQN(nn.Module):def __init__…

基于web的购物网站的设计与实现(系统源码+lw+部署文档+讲解等)

文字目录&#xff1a; 目录 详细视频演示 系统实现界面 1.1系统开发环境以及运行环境 1.1.1系统开发环境 1.1.2系统运行环境 1.2系统功能实现 1.3管理员模块实现 2 技术介绍 2.1 thinkphp5介绍 2.2 MySQL数据库 2.3 B/S结构 4.1系统结构设计 4.2系统功能结构设计…

如何挑选理想的报表工具?从入门到专业,测评十大热门工具的优缺点

报表能够用表格和图表等格式动态显示数据&#xff0c;因此衍生出相应的报表工具&#xff0c;已经有20年以上的发展历史了&#xff0c;期间报表工具不断随着需求的改变而更新迭代&#xff0c;今天博主就来推荐十款实用的报表工具&#xff0c;祝你轻松解决烦人的中国式复杂报表。…

【MySQL进阶】MySQL主从复制

目录 MySQL主从复制 概念 主从形式 一主多从 多主一从 双主复制 主从级联复制 主从复制原理 三个线程 两个日志文件 主从复制的主要工作模式 异步复制 半同步复制 全同步复制 MySQL主从复制 概念 MySQL主从复制是一种数据分布机制&#xff0c;允许从一个数据库服…

32.x86游戏实战-使用物品call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【TDH社区版大事件】图分析、全文检索、小文件治理、数据开发工具通通都有!

星环科技大数据基础平台TDH社区版&#xff0c;在保留了商业版核心技术优势的基础上最大程度地降低了用户使用大数据技术的门槛与成本&#xff0c;具有更轻量、更简单、更易用等特性。 此次TDH社区开发版、社区版、社区订阅版均发布了新版本&#xff0c;带来新的产品组件和新的…

前端学鸿蒙有必要么?

在当今科技飞速发展的时代&#xff0c;前端开发领域也在不断演进和变革。那么&#xff0c;对于前端开发者来说&#xff0c;学习鸿蒙是否有必要呢? 一、前端学鸿蒙的必要性分析 1、鸿蒙开发简介 鸿蒙操作系统(HarmonyOS)是一个面向全场景的分布式操作系统&#xff0c;它不仅支持…

SX_c语言字符带空格字符串读写_9

改项目的时候又发现c语言读字符串的一些细节这里做补充其中%[^\n]可以读取带空格的字符串 #include <stdio.h>int main(){char cmd;scanf("%c", &cmd);char time[32] {0};scanf("%s", time);printf("%c\n", cmd);printf("%s&quo…

在IoT中的TCP增强

本文内容节选自一篇系统性文献综述&#xff08;Systematic Literature Review, SLR&#xff09;&#xff0c;标题为“TCP Performance Enhancement in IoT and MANET”&#xff0c;由 Sultana Parween 和 Syed Zeeshan Hussain 撰写&#xff0c;发表在《International Journal …

MySQL --- 内置函数介绍

目录 一、日期函数 二、字符串函数 三、数学函数 四、 其他函数 一、日期函数 current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime的日期部分date_add(date&#xff0c;interval d_value_type) 在date中添加时间/日期…

微信支付海外走红,中国企业跨境支付‘轻装上阵’

当我们谈论中国企业走向世界&#xff0c;拓展海外市场的征程时&#xff0c;一个不可忽视的助力者就是微信支付。它不仅是一个支付工具&#xff0c;更是连接中国企业和全球消费者的桥梁&#xff0c;让中国企业在海外也能享受到与国内同等的支付便利与信任。 早在2016年1 月 15 …

【Vue3】组件通信之$attrs

【Vue3】组件通信之$attrs 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

便携气象设备:随身携带的天气侦探

在快节奏的现代生活中&#xff0c;准确掌握天气变化成为了我们日常出行、户外探险和农业生产的重要参考。 便携气象设备以其轻便、易携、功能全面的特点&#xff0c;满足了我们对即时气象信息的需求。无论是突如其来的暴雨&#xff0c;还是持续多日的晴朗&#xff0c;只需轻轻一…

mac下载exe后不自动打开虚拟机

看到网上没有相关教程&#xff0c;正好解决了&#xff0c;发一下 场景&#xff1a;Mac环境下下载EXE文件&#xff0c;会导致VM虚拟机自动打开来执行文件&#xff0c;所以很烦。 解决方法&#xff1a; Mac系统-系统设置-隐私与安全-vmfusion-取消掉下载文件夹即可。 还有其他…