【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范

简介: 【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范

前言

本文介绍 vue3-element-admin 如何通过 Husky + Lint-staged + Commitlint + Commitizen + cz-git 来配置 Git 提交代码规范。


核心内容是配置 Husky 的 pre-commit 和 commit-msg 两个钩子:


pre-commit:Husky + Lint-staged 整合实现 Git 提交前代码规范检测/格式化 (前提:ESlint + Prettier + Stylelint 代码统一规范);


commit-msg: Husky + Commitlint + Commitizen + cz-git 整合实现生成规范化且高度自定义的 Git commit message。


微信图片_20230710101825.png

Husky

Husky 是 Git 钩子工具,可以设置在 git 各个阶段(pre-commit、commit-msg 等)触发。


官方网站:https://typicode.github.io/husky


Husky 安装有 自动安装 和 手动安装 两种方式 。

微信图片_20230710101829.png/



官方推荐自动安装的方式,使用 husky-init 命令一次性完成依赖自动安装和配置


npx husky-init && npm install

1

自动生成的 .husky 目录和指令:

微信图片_20230710101847.png



Lint-staged

lint-staged 是一个在 git add 到暂存区的文件运行 linters (ESLint/Prettier/StyleLint) 的工具,避免在 git commit 提交时在整个项目执行。


官方网站:https://github.com/okonet/lint-staged


Lint-staged 安装

npm install -D lint-staged

1

Lint-staged 配置

检测/格式化配置


package.json 中添加不同文件在 git 提交执行的 lint 检测配置


"lint-staged": {

   "*.{js,ts}": [

     "eslint --fix",

     "prettier --write"

   ],

   "*.{cjs,json}": [

     "prettier --write"

   ],

   "*.{vue,html}": [

     "eslint --fix",

     "prettier --write",

     "stylelint --fix"

   ],

   "*.{scss,css}": [

     "stylelint --fix",

     "prettier --write"

   ],

   "*.md": [

     "prettier --write"

   ]

 }


添加 lint-staged 指令


package.json 的 scripts 添加 lint-staged 指令


 "scripts": {

   "lint:lint-staged": "lint-staged"

 }


修改提交前钩子命令


根目录 .husky 目录下 pre-commit 文件中的 npm test 修改为 npm run lint:lint-staged


#npm test

npm run lint:lint-staged

1

2

Git 提交代码检测

微信图片_20230710101902.png


Commitlint

Commitlint 检查您的提交消息是否符合 Conventional commit format。-- Commitlint 官网


Commitlint 安装

参考 官方安装文档


npm install -D @commitlint/cli @commitlint/config-conventional

1

Commitlint 配置

根目录创建 commitlint.config.cjs 配置文件,示例配置: @commitlint/config-conventional


module.exports = {

 // 继承的规则

 extends: ["@commitlint/config-conventional"],

 // @see: https://commitlint.js.org/#/reference-rules

 rules: {

   "subject-case": [0], // subject大小写不做校验

   // 类型枚举,git提交type必须是以下类型

   "type-enum": [

     2,

     "always",

     [

   'feat', // 新增功能

       'fix', // 修复缺陷

       'docs', // 文档变更

       'style', // 代码格式(不影响功能,例如空格、分号等格式修正)

       'refactor', // 代码重构(不包括 bug 修复、功能新增)

       'perf', // 性能优化

       'test', // 添加疏漏测试或已有测试改动

       'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)

       'ci', // 修改 CI 配置、脚本

       'revert', // 回滚 commit

       'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)

     ],

   ],

 },

};


添加提交信息校验钩子


执行下面命令生成 commint-msg 钩子用于 git 提交信息校验,命令来自:@commitlint/README.md


npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"

1

生成的配置如下:

微信图片_20230710101916.png



Commitlint 验证

正确的提交格式:<type>(<scope>): <subject> ,type 和 subject 默认必填


不规范的 commit msg,提交失败

微信图片_20230710101945.png


规范的 commit msg,提交成功

微信图片_20230710101947.png

Commitizen & cz-git

commitizen: 基于Node.js的 git commit 命令行工具,辅助生成标准化规范化的 commit message。–官方文档

cz-git: 一款工程性更强,轻量级,高度自定义,标准输出格式的 commitizen 适配器。–官方文档

Commitizen & cz-git 安装

npm install -D commitizen cz-git

1

cz-git 配置

修改 package.json 指定使用的适配器


"config": {

   "commitizen": {

     "path": "node_modules/cz-git"

   }

 }

1

2

3

4

5

cz-git 与 commitlint 进行联动给予校验信息,所以可以编写于 commitlint 配置文件之中(⇒ 配置模板)。


// commitlint.config.cjs

module.exports = {

 rule: {

   ...

 },

 prompt: {

 messages: {

     type: '选择你要提交的类型 :',

     scope: '选择一个提交范围(可选):',

     customScope: '请输入自定义的提交范围 :',

     subject: '填写简短精炼的变更描述 :\n',

     body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',

     breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',

     footerPrefixesSelect: '选择关联issue前缀(可选):',

     customFooterPrefix: '输入自定义issue前缀 :',

     footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',

     generatingByAI: '正在通过 AI 生成你的提交简短描述...',

     generatedSelectByAI: '选择一个 AI 生成的简短描述:',

     confirmCommit: '是否提交或修改commit ?',

   },

   // prettier-ignore

   types: [

     { value: "feat",     name: "特性:     ✨  新增功能", emoji: ":sparkles:" },

     { value: "fix",      name: "修复:     🐛  修复缺陷", emoji: ":bug:" },

     { value: "docs",     name: "文档:     📝  文档变更", emoji: ":memo:" },

     { value: "style",    name: "格式:     💄  代码格式(不影响功能,例如空格、分号等格式修正)", emoji: ":lipstick:" },

     { value: "refactor", name: "重构:     ♻️  代码重构(不包括 bug 修复、功能新增)", emoji: ":recycle:" },

     { value: "perf",     name: "性能:     ⚡️  性能优化", emoji: ":zap:" },

     { value: "test",     name: "测试:     ✅  添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"},

     { value: "build",    name: "构建:     📦️  构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"},

     { value: "ci",       name: "集成:     🎡  修改 CI 配置、脚本",  emoji: ":ferris_wheel:"},

     { value: "revert",   name: "回退:     ⏪️  回滚 commit",emoji: ":rewind:"},

     { value: "chore",    name: "其他:     🔨  对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"},

   ],

   useEmoji: true,

   emojiAlign: 'center',

   useAI: false,

   aiNumber: 1,

   themeColorCode: '',

   scopes: [],

   allowCustomScopes: true,

   allowEmptyScopes: true,

   customScopesAlign: 'bottom',

   customScopesAlias: 'custom',

   emptyScopesAlias: 'empty',

   upperCaseSubject: false,

   markBreakingChangeMode: false,

   allowBreakingChanges: ['feat', 'fix'],

   breaklineNumber: 100,

   breaklineChar: '|',

   skipQuestions: [],

   issuePrefixes: [{ value: 'closed', name: 'closed:   ISSUES has been processed' }],

   customIssuePrefixAlign: 'top',

   emptyIssuePrefixAlias: 'skip',

   customIssuePrefixAlias: 'custom',

   allowCustomIssuePrefix: true,

   allowEmptyIssuePrefix: true,

   confirmColorize: true,

   maxHeaderLength: Infinity,

   maxSubjectLength: Infinity,

   minSubjectLength: 0,

   scopeOverrides: undefined,

   defaultBody: '',

   defaultIssues: '',

   defaultScope: '',

   defaultSubject: '',

 }

}


添加提交指令


package.json 添加 commit 指令


"scripts": {

    "commit": "git-cz"

}


cz-git 验证

执行 commit 指令进行代码提交流程,执行前需将改动的文件通过 git add 添加到暂存区


npm run commit

1

执行命令之后会出现询问交互

微信图片_20230710102008.png



根据提示一步步的完善 commit msg 信息

微信图片_20230710102012.png



commit 之后 git push 推送到远程仓库看到提交信息效果如下:

微信图片_20230710102037.png



项目源码

完整项目源码地址如下,如果有相关问题可以通过项目 关于我们 添加交流群。


Gitee Github

仓库地址 vue3-element-admin vue3-element-admin


相关文章
|
13天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
16天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
37 2
|
1月前
|
JavaScript 数据可视化
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
这篇文章详细介绍了Vue CLI 3版本创建项目时的Runtime-Compiler和Runtime-only两种模式的区别、Vue程序的运行过程、render函数的使用、eslint的关闭方法,以及Vue CLI 2和3版本配置文件的不同和脚手架3版本创建项目的配置文件配置方法。
42 3
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
|
21天前
|
算法 网络安全 开发工具
[Git]关联远程库的两种方法及配置
本文介绍了 git 的四种连接方式:ssh 连接、HTTPS 连接、SVN 连接和 SVN + ssh 连接,重点讲解了 HTTPS 和 ssh 连接方式的配置及注意事项。文章详细解释了 HTTPS 连接的身份验证过程、常见问题及解决方案,以及 ssh 连接的公钥和私钥的创建、配置方法。此外,还介绍了如何在同一台电脑上连接多个 gitee 账号的方法。
57 0
[Git]关联远程库的两种方法及配置
|
25天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
252 4
|
29天前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
34 3
|
1月前
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
294 0
|
1月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
35 5
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
39 1
|
1月前
|
编译器 网络安全 开发工具
git学习五:切换本地仓库出现的问题。修改git配置初始化。error:src refspec master does not match any。错误总结,送上几个案例
这篇文章是关于Git使用中遇到的一些问题及其解决方案的总结,包括切换本地仓库时的问题、修改Git初始化配置、以及解决"error: src refspec master does not match any"错误等。
58 0

相关实验场景

更多
下一篇
无影云桌面