赞
踩
我们使用husky
检测git
钩子,lint-staged
规范化暂存区代码,commitlint
规范化提交信息。
Git 有很多的 hooks, 让我们在不同的阶段,对代码进行不同的操作,控制提交到仓库的代码的规范性,和准确性, 以下只是几个常用的钩子
git钩子 | 描述 |
| 判断提交的代码是否符合规范 |
| 判断 commit 信息是否符合规范 |
| 执行测试,避免对以前的内容造成影响 |
husky
:操作git钩子的工具lint-staged
:本地暂存代码检查工具commitlint
:提交信息校验工具commitizen
:辅助提交信息 ,全局安装后可以使用cz
命令,选项式提交git
yarn add -D husky lint-staged
在package.json
中添加脚本
npm set-script prepare "husky install"
初始化husky
,将git hooks
钩子交由,husky
执行。会在根目录创建 .husky
文件夹
yarn prepare
检测pre-commit
钩子,执行 npx lint-staged
指令
npx husky add .husky/pre-commit "npx lint-staged"
可以在根目录创建 .lintstagedrc.json
文件控制检查和操作方式
- {
- "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
- "*.{css,json,md,less,scss}": ["prettier --write"]
- }
也可以在package.json
中配置:
- {
- "lint-staged": {
- "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
- "*.{css,json,md,less,scss}": ["prettier --write"]
- }
- }
- yarn add -D commitlint
- npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
添加配置文件commitlint.config.js
:
- // commitlint.config.js
- /** @type {import('cz-git').UserConfig} */
-
- module.exports = {
- rules: {
- // @see: https://commitlint.js.org/#/reference-rules
- // 配置规则:
- // 每个配置是一个个键值对,键值是array类型:
- // 第一个参数表示:重要等级,0表示关闭规则,1表示warning,2表示error
- // 第二个参数表示:应用与否,always | nerver
- // 第三个参数表示:配置规则的值
- // commit message的结构如下:
- // <type>[optional scope]: <description>
- // [optional body]
- // [optional footer(s)]
- // 简短描述(subject)
- // 详细描述(body)
- 'body-leading-blank': [1, 'always'], // body开头空行
- 'body-max-line-length': [2, 'always', 100], // body最大内容长度
- 'footer-leading-blank': [1, 'always'], // footer开头空行
- 'footer-max-line-length': [2, 'always', 100], // footer最大内容长度
- 'header-max-length': [2, 'always', 100], // header最大长度
- // subject单词格式
- 'subject-case': [
- 2,
- 'never',
- ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
- ],
- 'subject-empty': [2, 'never'], // subject是否为空
- 'subject-full-stop': [2, 'never', '.'], // subject中止符
- 'type-case': [2, 'always', 'lower-case'], // type单词格式
- 'type-empty': [2, 'never'], // type是否为空
- // type可选值
- 'type-enum': [
- 2,
- 'always',
- [
- 'release',
- 'build',
- 'update',
- 'docs',
- 'add',
- 'fix',
- 'perf',
- 'refactor',
- 'revert',
- 'style',
- 'test',
- ],
- ],
- },
- prompt: {
- alias: {
- fd: 'docs: :memo: 文档更新',
- uv: 'release: :bookmark: update version',
- },
- messages: {
- type: '选择你要提交的类型 :',
- scope: '选择一个提交范围(可选):',
- customScope: '请输入自定义的提交范围 :',
- subject: '填写简短精炼的变更描述 :\n',
- body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
- breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
- footerPrefixsSelect: '选择关联issue前缀(可选):',
- customFooterPrefixs: '输入自定义issue前缀 :',
- footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',
- confirmCommit: '是否提交或修改commit ?',
- },
- types: [
- {
- value: 'add',
- name: 'add: ✨ 新增功能',
- emoji: ':sparkles:',
- },
- {
- value: 'update',
- name: 'update: 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/944018推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。