【git】如何实现规范git commit -m的格式

.husky/commit-msg

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"yarn commitlint --edit $1

.vscode/settings.json

 		"ahooks","aliyuncs","antd","commitlint", // 新增"deadcode","denormalize","echarts","EDITMSG", // 新增"favicons","iconfont","IIFE",

commitlint.config.ts

import type { UserConfig } from '@commitlint/types';
import { RuleConfigSeverity } from '@commitlint/types';
import dotenv from 'dotenv';
import fs from 'fs';
import path from 'path';dotenv.config({ path: path.resolve(__dirname, '.env.local') });const Configuration: UserConfig = {extends: ['@commitlint/config-conventional'],rules: {'type-case': [RuleConfigSeverity.Error, 'always', ['lower-case']],'type-enum': [RuleConfigSeverity.Error, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert']],'subject-rule': [RuleConfigSeverity.Error, 'always']},plugins: [{rules: {'type-enum': ({ type }) => {const typeList = ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert'];return [typeList.includes(type || ''), `类型错误,只允许提交类型为【${typeList}】的 commit, 例如:feat: 【1112223334445556667】xxx`];},'subject-rule': ({ type, subject }) => {let _subject = subject || '';const regRex = /^【[0-9]{19}】(?!\s*$).+/;if (process.env.TASK_NO && !regRex.test(_subject)) {const commitEditMsgPath = path.resolve(process.cwd(), '.git', 'COMMIT_EDITMSG');const commitMsgContent = fs.readFileSync(commitEditMsgPath, 'utf-8');const lines = commitMsgContent.split('\n');_subject = `${process.env.TASK_NO}${subject}`;if (lines.length > 0) {lines[0] = `${type}: ${_subject}`;}fs.writeFileSync(commitEditMsgPath, lines.join('\n'));}return [regRex.test(_subject), '提交格式不符合规范,需要包含19位任务ID,且包含基础的 commit 信息, 例如:feat: 【1112223334445556667】xxx'];}}}]
};export default Configuration;

package.json

"devDependencies": {"@commitlint/cli": "^17.8.1", // 新增"@commitlint/config-conventional": "^17.8.1", // 新增"@types/lodash": "^4.14.202","@types/node": "^20.11.6","@types/react": "^18.0.33","@types/react-dom": "^18.0.11","chalk": "^4.1.2","cross-env": "^7.0.3","dotenv": "^16.4.5", // 新增"eslint": "^8.54.0","eslint-config-prettier": "^9.0.0","eslint-import-resolver-alias": "^1.1.2",...
}

.env.local

# .env 的本地版本,这里配置的环境变量会覆盖 .env 中的变量。
APP_ENV=sz-test1
# APP_ENV=sz-dev
# TASK_NO=1788498654317685432
TASK="[{"release/2024-07-18" : "1807622818796223578"}]"

.env

# 对应测试环境,值从 config/server.ts 中的 key 中选
# 开发时请在本地根目录新建一个 `.env.local` 文件,自行修改为需要的开发环境
# APP_ENV=sz-test# 多语言相关接口的域名。
# 各环境统一走 生产jk.cc.cn 域名(环境由接口的env参数做区分)
# 这个值基本不会动,除非服务端需要调试特定环境的多语言接口。
# 在使用时:
#   1.APP_ENV=production 时,不使用当前变量,固定走生产的域名 jk.cc.cn。
#   2. 测试环境用当前变量指定的域名,而不是随环境对应的域名。
#   3. 本地开发会忽略该变量,走本地开发域名以mock本地语料# 自动添加任务编号到 Commit, TASK_NO 根据自己要求填写
# TASK_NO=1803607484162225644

README.md

# 运营平台前端项目## yarn- 统一使用 yarn 作为包管理工具## 配置本地开发环境- 切换环境请按 `.env` 中关于 `APP_ENV` 的注释,在`.env.local` 中配置 `APP_ENV` 变量区分连接的环境。
- `yarn install` 时会自动创建一个空白的 `.env.local` 文件## 代码校验macos用户,需要在 `yarn install`之后,于项目目录下执行下面两行命令。使 husky 生效。```sh
chmod ug+x .husky/*
chmod ug+x .git/hooks/*
UI库
  • 依赖antd 4.24.x版本,但是不要直接从antd引入, UI相关的组件从核心库引入
// 错误引入方式:
import { Button } from 'antd';// 正确引入方式
import { Button } from '@/component';
权限
  • 抛弃umi的authority配置。菜单直接在路由里面配置权限code,具体权限code是什么,需要找后端
开发须知
  • 请运行:git config --global core.autocrlf false 去除 git 进入暂存区时自动转换为 crlf
  • 请运行:git config --global core.ignorecase false 去除 git 忽略大小写
  • 编辑器必须开启 eslint 检测和保存自动修复功能(具体配置详细看:编辑器配置 Eslint)
  • master 是主分支,feature+版本号是开发分支,release+版本号是预发布分支
  • 统一使用 yarn 作为包管理工具
野火本地开发
  • 修改 hosts
172.22.3.196  im.jk.cn

不同环境 ip 不同

business 和 test 服务修改 hosts 即可成功连接本地联调只有 workdev 环境可连接成功 ( 请求头 Origin 为 localhost 造成连接失败, 连接非 dev 的服务连接会被拒绝 )

其他

参考umi开发文档 Umi

styled-components 使用方法
基础
// Create a Title component that'll render an <h1> tag with some styles
const Title = styled.h1`font-size: 1.5em;text-align: center;color: #BF4F74;
`;// Create a Wrapper component that'll render a <section> tag with some styles
const Wrapper = styled.section`padding: 4em;background: papayawhip;
`;// Use Title and Wrapper like any other React component – except they're styled!
render(<Wrapper><Title>Hello World!</Title></Wrapper>
);
根据属性进行调整
const Button = styled.button<{ $primary?: boolean; }>`/* Adapt the colors based on primary prop */background: ${props => props.$primary ? "#BF4F74" : "white"};color: ${props => props.$primary ? "white" : "#BF4F74"};font-size: 1em;margin: 1em;padding: 0.25em 1em;border: 2px solid #BF4F74;border-radius: 3px;
`;render(<div><Button>Normal</Button><Button $primary>Primary</Button></div>
);
扩展样式
// The Button from the last section without the interpolations
const Button = styled.button`color: #BF4F74;font-size: 1em;margin: 1em;padding: 0.25em 1em;border: 2px solid #BF4F74;border-radius: 3px;
`;// A new component based on Button, but with some override styles
const TomatoButton = styled(Button)`color: tomato;border-color: tomato;
`;render(<div><Button>Normal Button</Button><TomatoButton>Tomato Button</TomatoButton></div>
);
伪元素、伪选择器和嵌套
const Thing = styled.div.attrs((/* props */) => ({ tabIndex: 0 }))`color: blue;&:hover {color: red; // <Thing> when hovered}& ~ & {background: tomato; // <Thing> as a sibling of <Thing>, but maybe not directly next to it}& + & {background: lime; // <Thing> next to <Thing>}&.something {background: orange; // <Thing> tagged with an additional CSS class ".something"}.something-else & {border: 1px solid; // <Thing> inside another element labeled ".something-else"}
`render(<React.Fragment><Thing>Hello world!</Thing><Thing>How ya doing?</Thing><Thing className="something">The sun is shining...</Thing><div>Pretty nice day today.</div><Thing>Don't you think?</Thing><div className="something-else"><Thing>Splendid.</Thing></div></React.Fragment>
);
强制样式提升
const Thing = styled.div`&& {color: blue;}`const GlobalStyle = createGlobalStyle`div${Thing} {color: red;}`render(<React.Fragment><GlobalStyle /><Thing>I'm blue, da ba dee da ba daa</Thing></React.Fragment>)

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

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

相关文章

用三行代码“偷袭白嫖党”,保护自己的代码(多语言实现)

计算机科学专业的同学们最近遇到了一件烦心事。教授布置了一系列具有挑战性的编程作业&#xff0c;需要大家运用所学知识来完成。然而&#xff0c;一些同学却动起了歪脑筋&#xff0c;想要通过抄袭他人的代码来轻松完成任务。 小李、小王和小张是同宿舍的好友&#xff0c;他们…

第1课:计算机历史与基础——一段跨越时代的技术演进

目录 引言计算机的起源机械计算时代 电子计算机的曙光个人计算机的革命现代计算机的多样化计算机的分类计算机的特点计算机技术的未来发展结语 引言 在数字化浪潮的推动下&#xff0c;计算机已经成为现代社会的中枢神经。它们不仅驱动着我们的工作流程&#xff0c;更深入地影响…

四、GD32 MCU 常见外设介绍(1)RCU 时钟介绍

系统架构 1.RCU 时钟介绍 众所周知&#xff0c;时钟是MCU能正常运行的基本条件&#xff0c;就好比心跳或脉搏&#xff0c;为所有的工作单元提供时间 基数。时钟控制单元提供了一系列频率的时钟功能&#xff0c;包括多个内部RC振荡器时钟(IRC)、一个外部 高速晶体振荡器时钟(H…

【力扣习题】C语言

目录 【876.链表的中间点】 思路&#xff1a; 【83删除排序链表中的重复元素】 思想&#xff1a; 代码&#xff1a; 【876.链表的中间点】 思路&#xff1a; 1、计算链表的长度 2、遍历到链表中间长度并输出值 /*** Definition for singly-linked list.* struct ListN…

如何提升短视频的曝光量和获客效能?云微客来解决

在流量至上的当下&#xff0c;短视频凭借其优势&#xff0c;迅速成为了众多企业获客引流的核心营销手段。进入短视频赛道后&#xff0c;如何提升短视频的曝光量和获客效能&#xff0c;就成为了众多企业亟待解决的焦点。 如果你不想投入大量的广告预算&#xff0c;还想在短视频平…

【GoF23种设计模式+简单工厂模式】

一、设计模式概述与类型 1.1、设计模式的一般定义&#xff1a; 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码&#xff0c;让代码更容易被他人理解并且保证代…

【Linux】进程间通信及管道详细介绍(上)

前言 本节我们开始学习进程间通信相关的知识&#xff0c;并详细探讨一下管道&#xff0c;学习匿名管道和命名管道的原理和代码实现等相关操作… 目录 1. 进程间通信背景1.1 进程通信的目的&#xff1a; 2 管道的引入&#xff1a;2.1 匿名管道&#xff1a;2.1.1 匿名管道的原理&…

【中项】系统集成项目管理工程师-第5章 软件工程-5.1软件工程定义与5.2软件需求

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

【数据结构】AVL树(图文解析 + 代码实现)

目录 1、AVL树的概念 2、AVL树结点的定义 3、AVL树的插入 4、AVL树的旋转 4.1 左单旋 4.2 右单旋 4.3 右左双旋 4.4 左右双旋 5、AVL树的验证 6、AVL树的性能 前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;会大仙&#xff0c;这几个容器有个共同点是…

sklearn基础学习

1. 简介 1.1 什么是sklearn sklearn&#xff0c;或者更正式地称为scikit-learn&#xff0c;是一个基于Python的开源机器学习库。它建立在NumPy、SciPy和matplotlib之上&#xff0c;提供了简单而有效的工具用于数据挖掘和数据分析。sklearn支持监督学习和无监督学习算法&#…

使用 jQuery 中的 this 实例

在 jQuery 中&#xff0c;this 关键字用于表示指向当前操作的 DOM 元素。本篇博客将详细介绍如何在 jQuery 中使用 this 实例。 一、选择器中的 this 在选择器中&#xff0c;this 可以方便地指向当前操作的 DOM 元素。例如&#xff0c;当用户点击一个按钮时&#xff0c;我们想…

【Linux常用命令】之find命令

Linux常用命令之find命令 文章目录 Linux常用命令之find命令常用命令之find背景介绍 总结 作者简介 听雨&#xff1a;一名在一线从事多年研发的程序员&#xff0c;从事网站后台开发&#xff0c;熟悉java技术栈&#xff0c;对前端技术也有研究&#xff0c;同时也是一名骑行爱好…

Linux Gui 窗口对话和窗口操作

zenity 可以实现窗口对话 eg: zenity --error --width 300 --text "Permission denied. Cannot write to the file." ChosenDate$(zenity --calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 --month 9 --year 2019); …

【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !

目录 C语言指针精讲1. 什么是指针&#xff1f;1.1 指针的内存模型1.1.1 指针演示输出 1.2 指针运算1.2.1 指针算术运算输出1.2.2 指针与数组的关系输出 1.3 指针类型1.3.1 不同类型的指针示例输出1.3.2 void 指针输出 1.4 指针与内存管理动态内存分配输出 1.5 指针与内存泄漏1.…

vue 两个页面切换, 再回到当前页,还是离开前的数据

1、要保证页面的name 和 建路由的大小写一致 2、页面不用生命周期--activated 调接口刷新

在 Kubernetes 中设置 Pod 优先级及其调度策略详解

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【论文解读】大模型算法发展

一、简要介绍 论文研究了自深度学习出现以来&#xff0c;预训练语言模型的算法的改进速度。使用Wikitext和Penn Treebank上超过200个语言模型评估的数据集(2012-2023年)&#xff0c;论文发现达到设定性能阈值所需的计算大约每8个月减半一次&#xff0c;95%置信区间约为5到14个月…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid&#xff0c;使用中发现唯一建冲突&#xff0c;生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…

开发日志:windows修复SSL漏洞CVE-2016-2183(3389端口)

漏洞危害&#xff1a; 具有足够资源的中间人攻击者可利用此漏洞,通过“birthday”攻击检测会在固定密码与已知纯文本之间泄露 XOR 的冲突,进而泄露密码文本(例如安全 HTTPS Cookie),并可能导致劫持经认证的会话。 参见《支持SSL 64位块大小的密码套件(SWEET32)-修复方案》 参考…

数据库编程中游标 连接 commit

在数据库编程中&#xff0c;关闭游标和连接是一个重要的步骤&#xff0c;确保资源正确地释放和数据库操作的完整性。 游标&#xff08;Cursor&#xff09;和连接&#xff08;Connection&#xff09;是数据库编程中两个关键但不同的概念。它们在数据库操作中的作用和功能有所不…