代码检测规范和git提交规范

摘要:之前开发的项目,代码检测和提交规范都是已经配置好的,最近自己新建的项目就记录下相关配置过程。

1. ESlint配置

        2013年6月创建开源项目,提供一个插件化的JavaScript代码检测工具,创建项目是生成的eslintrc.js文件;

//Eslint配置文件遵循commonJS的导出规则,所导出的的对象就是ESLint的配置对象

//官方文档:https://www.tkcnn.com/eslint/core-concepts.html

// Eslint配置文件遵循commonJS的导出规则,所导出的的对象就是ESLint通的配置对象
// 文档:https://eslint.bootcss.com/docs/user-guide/configuring
module.exports = {
  // 表示当前目录即为根目录,ESLint规则将被限制到该目录下
  root: true,
  // env表示启用ESLint检测的环境
  env: {
    // node环境下启动ESLint检测
    node: true
  },
  // ESLint中基础配置需要继承的配置;
  extends: [
    'plugin:vue/vue3-essential',
    '@vue/standard'
  ],
  // 解析器:表述需要解析的内容
  parserOptions: {
    parser: 'babel-eslint'
  },
  // rules中需要修改的启用规则(key表示启用的规则)及其各自的错误级别
  /**
   * 错误级别分为三中:
   * "off"或者0 - 关闭规则
   * "warn"或者1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)
   * "error"或者2 - 开启规则,使用错误界别的错误:error(当被触发的时候,程序会退出)
   */
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'space-before-function-paren': 'off'   //关闭此规则
  }
}

2. Prettier配置

        Prettier是代码格式化工具,具有开箱即用、直接集成到vscode的特点。保存时,让代码直接符合ESLint,prettier配置步骤如下:

  • vscode安装prettier可以在配置prettierrc时获得一些提示;
  • 根目录新增prettierrc文件,配置的JSON内容如下:
{
  //semi:表示js语句结尾是否尾随分号;
  "semi": false,
  //singleQuote:表示是否用单引号代替所有双引号;
  "singleQuote": true,
  //trailingComma:表示多行语法中,是否需要再最后一行添加逗号,有all\es5\none三个值;
  "trailingComma": "none"
}

注:也可以使用这样的配置

module.exports = {
  eslintIntegration: true,
  printWidth: 160, // 指定代码长度,超出换行
  tabWidth: 2, // tab 键的宽度
  useTabs: false, // 不使用tab
  semi: true, // 结尾加上分号
  singleQuote: true, // 使用单引号
  quoteProps: 'as-needed', // 要求对象字面量属性是否使用引号包裹
  trailingComma: 'none', // 确保对象的最后一个属性后有逗号
  bracketSpacing: true, // 大括号有空格 { name: 'rose' }
  arrowParens: 'always', // 箭头函数,单个参数添加括号
  requirePragma: false, // 是否严格按照文件顶部的特殊注释格式化代码
  insertPragma: false, // 是否在格式化的文件顶部插入Pragma标记,以表明该文件被prettier格式化过了
  proseWrap: 'preserve', // 按照文件原样折行
  htmlWhitespaceSensitivity: 'ignore', // html文件的空格敏感度,控制空格是否影响布局
  endOfLine: 'auto' // 结尾是 \n \r \n\r auto
};
  • vscode的设置中找到save,勾选Format on save;

        综上实现保存后,自动格式化代码的目的。此外,还需要处理几处细节

  1. vscode→首选项→设置→搜Tab Size设置制表符为两个空格2
  2. 如果vscode安装了多个代码格式化工具,可以右键选中『使用...格式化文档』配置默认的格式化程序
  3. ESLint和prettier之间冲突:space-before-function-paren;在ESLInt的rules中配置关闭:
'space-before-function-paren': 'off'

3. Git提交规范

        Angular团队Conventional Commits specification约定式提交,规范链接(约定式提交)。提交说明的结构如下所示

<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
译文:
<类型>[可选 范围]: <描述>
[可选 正文]
[可选 脚注]

3.1 Commitizen

        使用Commitizen进行代码提交(git commit)时,commitizen会再提交时填写所必须提交的字段;

1.全局安装Commitizen(建议使用有管理员权限的终端)

sudo npm install -g commitizen@4.2.4

2.安装配置cz-customizable插件

        1.使用npm下载cz-customizable

npm i cz-customizable@6.3.0 --save-dev

        2.添加下列配置再package.json中

...
"config": {
  "commitizen": {
    "path": "node_modules/cz-customizable"   //commitizen的自定义配置的安装位置
  }
}

3.根目录下创建.cz-config.js自定义提示文件

module.exports = {
  //可选类型
  types: [
    { value: 'feat', name: 'feat: 新功能' },
    { value: 'fix', name: 'fix: 修复' },
    { value: 'docs', name: 'docs: 文档变更' },
    { value: 'style', name: 'style: 代码格式(不影响代码运行的变动)' },
    { value: 'refactor', name: '重构(即不增加feature,也不修复bug)' },
    { value: 'perf', name: 'perf: 性能优化' },
    { value: 'test', name: 'test: 增加测试' },
    { value: 'chore', name: 'chore: 构建过程或辅助工具的变动' },
    { value: 'revert', name: 'revert: 回退' },
    { value: 'build', name: 'build: 打包' }
  ],
  //消息步骤
  messages: {
    type: '请选择提交的类型:',
    customScope: '请输入修改范围(可选)',
    subject: '请简要描述提交(必填)',
    body: '请输入详细描述(可选)',
    footer: '请输入要关闭的issue(可选)',
    confirmCommit: '确认要使用以上信息提交? (y/n)'
  },
  //跳过问题
  skipQuestions: ['body', 'footer'],
  //subject文字默认长度是72
  subjectLimit: 72
}

4. 使用git cz代替git commit。使用git cz代替git commit即可看到上述提示内容

czh12@czh12deiMac vue-admin % **git add .**
czh12@czh12deiMac vue-admin % **git cz**
cz-cli@4.2.4, cz-customizable@6.3.0

All lines except first will be wrapped after 100 characters.
? 请选择提交的类型: feat: 新功能
? 请输入修改范围(可选) git
? 请简要描述提交(必填) add commitizen
? 请输入详细描述(可选) 使用commitizen提交代码
? 请输入要关闭的issue(可选) 

###--------------------------------------------------------###
feat(git): add commitizen

使用commitizen提交代码
###--------------------------------------------------------###

? 确认要使用以上信息提交? (y/n) Yes
 > running pre-commit hook: lint-staged
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ✔ Running tasks...
[master 5904db7] feat(git): add commitizen
 3 files changed, 512 insertions(+), 7 deletions(-)
 create mode 100644 .cz-config.js
chenzh12@chenzh12deiMac vue-admin % **git log**
commit 5904db74cd7128e4957dbcdcd45d33033cb4bdca (HEAD -> master)
Author: zhenghuachen <zhchenanhui@163.com>
Date:   Tue Oct 31 18:00:15 2023 +0800

    feat(git): add commitizen
    
    使用commitizen提交代码

3.2 Git Hooks

        上节完成了Commitizen提交的配置,但是需要使用git cz替换git commit才能实现,如果不使用git cz上述提交规范就没有预约效果。本节实现不符合约定式提交规范时,阻止当前提交,并抛出错误提示。

        本节实现的功能需要借助Git hooks,它是是一种在提交代码之前或之后执行特定操作的技术。本节主要借助一下两种钩子:

Git Hooks调用时机说明
pre-commitgit commit执行前他不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit以非零状态退出会导致命令在创建提交之前停止。可以使用 git commit —no-verify绕过
commit-msggit commit执行前 、可以用于将消息规范为魔种项目标准格式。还可以用于在检查消息文件后拒绝提交可以使用 git commit —no-verify绕过

简单来说:

commit-msg:可以用来贵干化标准格式,并且可以按需指定是否要拒绝本次提交;

pre-commit:会在提交前被调用,并且可以按需指定是否要拒绝本次提交。

使用git hooks校验提交信息需要使用到如下工具:

commitlint:用于检查提交信息(https://github.com/conventional-changelog/commitlint)

husky: 是git hooks工具(https://github.com/typicode/husky)

注: 需要保证npm版本是7.X以上

3.2.1 commitlint安装

1. 安装依赖

npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4

2. 创建commitlint.config.js文件。可以直接执行下面代码

echo "module.exports = {extends: ['@commitlint/config-conventional]'}" >
commitlint.config.js

        也可以手动新建commitlint.config.js并输入,表示导出的对象继承了这个第三方的包

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

3. 打开commitlint.config.js, 增加配置项

module.exports = {
  // 继承的规则
  extends: ['@commitlint/config-conventional'],
  // 定义规则
  roles: {
    // type 的类型定义: 表示git提交的type必须再以下类型范围
    'type-enum': [
      // 当前验证的错误级别,2表示错误
      2,
      // 在什么情况下进行验证
      'always',
      // 泛型内容
      [
        'feat', // 'feat: 新功能'
        'fix', // 'fix: 修复'
        'docs', // 'docs: 文档变更'
        'style', // 'style: 代码格式(不影响代码运行的变动)'
        'refactor', // '重构(即不增加feature,也不修复bug)'
        'perf', // 'perf: 性能优化'
        'test', // 'test: 增加测试'
        'chore', // 'chore: 构建过程或辅助工具的变动'
        'revert', // 'revert: 回退'
        'build' // 'build: 打包'
      ]
    ],
    // subject 大小写不做校验
    'subject-case': [0]
  }
}
3.2.2 husky安装

1. 安装依赖:npx husky install

czh12@czh12deiMac vue-admin % npx husky install
husky - Git hooks installed

2. 启动hooks,生成.husky文件夹:npx husky install

czh12@czh12deiMac vue-admin % npx husky install
husky - Git hooks installed

3. 再package.json中生成prepare指令(需要npm>7.0)

        可以手动添加,也可以通过如下指令生成

npm set-script prepare "husky install"

4. 执行prepare指令:npm run prepare

czh12@czh12deiMac vue-admin % npm run prepare

> vue-admin@0.1.0 prepare
> husky install

husky - Git hooks installed

5. 添加commitlint的hooks到husky中,并指令在commit-msg的hooks下执行npx —no-install commitlint —edit "$1"指令

        通过husky监听git hooks,在git hooks的commit-msg的回调的hooks里面执行commitlint来完成对应的提交代码的检测

czh12@czh12deiMac vue-admin % npx husky add .husky/commit-msg 'npx --no-install
 commitlint --edit "$1"'
husky - created .husky/commit-msg

        此时的.husky文件结构

        此时,不符合规范的提交将会被阻止

czh12@czh12deiMac vue-admin % git add .     
czh12@czh12deiMac vue-admin % git commit -m 'test'
⧗   input: test
✖   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 hook exited with code 1 (error)

        综上,代码强制规范化提交要求以配置完成,不符合提交规范的代码将无法提交。

3.3 通过pre-commit检测提交时代码规范

        ESLint和Prettier解决了本地代码格式问题,那么如果本地没有配置,提交时如何规避这种问题?这就需要使用husky和ESLint配合才可以。通过husky检测pre-commit钩子,在该钩子执行npx eslint —ext .js,.vue src(src目录下检测.js和.vue的文件)指令进行相关代码格式化规范检测

1. 执行npx husky add .husky/pre-commit "npx eslint —ext .js,.vue src"添加commit时(npx eslint —ext .js,.vue src 会在执行到该hooks是运行)

2. 执行上述命令,会在.husky文件夹中生成pre-commit文件,其内容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx eslint --ext .js,.vue src

3.4 通过lint-staged自动修复格式错误

        上节通过pre-commit处理了检测代码提交规范的问题,但是有两处需要优化。

        首先,若只修改个别文件,没必要检测所有文件的代码格式;

        其次,检测出错误依然需要手动修改。

        lint-staged可以让代码检查值作用域本次修改的代码,并自动修复并且推送。lint-staged的使用如下,修改package.json中lint-staged的配置为:

"lint-staged": {
  "src/**/* .(js,vue)": [
    "eslint --fix",
    "git add"
  ]
},

        如上配置,会在本地commit前校验提交代码是否符合ESLint规范,符合则提交,不符合则尝试修复,修复成功则提交,失败则提示。

        同时还要修改pre-commit中的内容,使其使用lint-staged检测提交

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

        综上,git提交规范配置完成。总结一下:

        代码格式规范,通过ESLint+Prettier+VSCode配合进行了处理,达到了保存代码,自动格式化代码格式的目的。git提交规范使用了husky来检测Git hooks钩子,并通过以下插件完成配置:

约定式提交规范

commitizen:git提交规范化工具

commitlint:用于检测提交信息

pre-commit: git hooks 钩子

lint-staged:只检测本次修改更新后的代码,并将出现的错误自动修复并推送。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python之:如何使用双重for循环输出九九乘法表?

文章目录 前言源代码 前言 如何用for双重循环输出九九乘法表&#xff1f;教程来咯&#xff01; 源代码 代码如下&#xff1a; for i in range(1, 10):for j in range(1, i1):print(f{j}{i}{i*j}\t, end)print()你学会了吗&#xff1f;效果如下&#xff1a; 想看详解&#…

全志平台R329 智能音响编译烧录方法

全志R329编译烧录方法 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;蓝牙耳机/音响音频&#xff0c;DSP音频项目核心开发资料, 一烧录 二 编译方法 …

STM32-开发板介绍

市面的开发板有很多&#xff0c;博主有幸了解到一款集成度较高的开发板&#xff0c;朗峰STM32F103RCT6&#xff0c;知名度不高&#xff0c;性价比很高&#xff0c;这是目前唯一一款集成了大量传感器和功能模块的高集成度开发板。 巨大的优势在于&#xff0c;传感器和功能模块的…

2024.2.18

使用fgets统计给定文件的行数 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./test.txt","w"))NULL){perror("open err");return -1;}fputc(h,fp);fputc(\n,fp);fput…

浅析Linux设备驱动:IO端口和IO内存

文章目录 概述IO端口和IO内存的区别 IO资源管理IO资源类型IO端口资源IO内存资源 IO资源分配 IO端口访问IO端口操作函数 IO内存访问IO内存操作函数 相关参考 概述 在计算机系统中&#xff0c;外部设备通常会提供一组寄存器或内存用于处理器配置和访问设备功能。这些寄存器或内存…

介绍7款免费的最佳地图/导航/定位/GIS开源项目

文章目录 1、xdh-map新德汇地图应用类库1.1、独立引用1.2、与MyUI结合使用1.3、快速上手1.3.1、采用项目工程模板创建项目【推荐】1.3.2、 调用组件库功能 2、蚂蚁金服AntV-L7地理空间数据可视分析引擎2.1、AntV-L7简介2.2、核心特性2.3、支持丰富的图表类型2.4、如何使用2.4.1…

windows 启动和关闭mysql

1)打开我的电脑-->2)在左边文件中右键此电脑--> 3)点击管理-->4)点击服务和应用程序-->5)点击服务-->6)查找自己MySQL名称 右击 启动或者关闭

一、直方图相关学习

1、灰度直方图 1.1 基本概念和作用 表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 1.2 代码示例 参数介绍 hist cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images&#xff1a;输入图像的列表。对于灰度图像&#xff0…

vue3-渲染机制

渲染机制 Vue 是如何将一份模板转换为真实的 DOM 节点的&#xff0c;又是如何高效地更新这些节点的呢&#xff1f;我们接下来就将尝试通过深入研究 Vue 的内部渲染机制来解释这些问题。 虚拟 DOM 你可能已经听说过“虚拟 DOM”的概念了&#xff0c;Vue 的渲染系统正是基于这…

阿里云香港轻量应用服务器是什么线路?cn2?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

317. 多关键字排序

/** Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.*/package ahwoj;import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;/*** 题目说排序关键字优先级依次降低&#xff0c;那就是说&…

C 语言 ConsoleRogueLike 控制台肉鸽游戏 DEVC++ VS2022都可用

使用 C 语言和 windows 的键盘检测函数和延迟函数&#xff0c;开发的控制台 roguelike 游戏 点开 .exe 文件立即进入游戏 AWSD 移动 J 攻击 K 加成buff 没有结束条件&#xff0c;除非碰到敌人。 其他模块功能还没来得及开发 author : 民用级脑的研发记录 DEVC 项目工程代码副本…

【机构vip教程】Appium自动化(2):Python+Appium环境搭建

windows下搭建pythonappium环境 搭建过程步骤如下&#xff1a; 1、安装jdk并配置好环境变量&#xff08;jdk版本1.8以上&#xff09; 2、安装android-sdk并配置好环境变量&#xff1b;具体步骤见&#xff1a;https://www.cnblogs.com/YouJeffrey/p/15243705.html 3、安装安…

是面试官放水,还是公司实在是太缺人?,字节原来这么容易进...

字节是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有19.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在华为…

嵌入式学习-C++-Day6

思维导图 作业 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一…

3年,5年,10年,网工人必看!

你们好&#xff0c;我是老杨。 2023年的职场上&#xff0c;无数人在思考“什么时候才能提前退休”这个问题。 对很多底层网工来说&#xff0c;二三十岁的年纪&#xff0c;距离60岁退休还有30年左右&#xff0c;是不是会觉得有点遥遥无期&#xff0c;毫无盼头&#xff1f; 现…

物奇平台ENC算法开关接口修改方法

物奇ENC算法开关接口修改 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 配置工具 2 代码接口

Ansible fetch 模块 该模块用于从远程某主机获取(复制)文件到本地

这里写目录标题 参数实例查看返回结果在这里插入图片描述 参数 dest&#xff1a;用来存放文件的目录 src&#xff1a;在远程拉取的文件&#xff0c;并且必须是一个file&#xff0c;不能是**目录* 实例 ansible slave -m fetch -a src/data/hello.txt dest/data/可以看到一个…

2024年【安全员-C证】报名考试及安全员-C证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证报名考试参考答案及安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及安全员-C证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-C证考试资料学员顺利通过考试。 1、【多选题】《工伤保险…

软件实例分享,台球厅收费系统电脑桌球店计时软件及灯控线路图教程

软件实例分享&#xff0c;台球厅收费系统电脑桌球店计时软件及灯控线路图教程 一、前言 以下软件程序教程以 佳易王桌球室计时计费软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、每个桌子对应的有 开台时间&#xff0c;所用的时…