husky(^9.1.4)的实践

437 阅读2分钟

为什么是husky

Husky 是一个 Git hooks(钩子) 工具,在你每次提交代码的时候检查你代码是否符合规范,这个规范可以自由设置,例如ESLint、Prettier等,尽管项目中有配置检测代码规范的工具,但难免有新同学会提交一些不规范的代码和message,所以直接在源头解决就好。 其本旨在帮助开发者在特定的 Git 操作(如 commit、push 等)之前或之后运行自定义脚本。

引用husky

在项目中执行命令

pnpm i husky -D -w

注意老版本和新版本有差异。具体参考 husky

package.json中 配置

"scripts": {
    "prepare": "husky"
}

在根目录中手动创建一个.husky文件夹 然后执行 npx husky

会在.husky 下生成一个_文件下 目录结构如下:

husky目录.png

Commitlint & 约定式提交(Conventional Commits)

Commitlint主要用于检查Git提交信息(commit messages)是否符合特定格式的工具。

执行命令:分别为commitlint的配置包和commitlint的命令行工具

pnpm install --save-dev @commitlint/config-conventional @commitlint/cli -w

新建 commitlint.config.cjs 内容如下:

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

接着在.husky文件夹下新增commit-msg文件,内容如下:

npx --no -- commitlint --edit "$1"

到此commitlint配置完毕。

约定式提交

Commitlint 通常与约定式提交一起使用。约定式提交是一种提交信息格式规范,具有如下结构:

<type>[optional scope]: <description>
[optional body]
[optional footer]

type

提交类型.png

scope(可选):影响的范围或模块。

description:简短描述本次提交的内容。

body(可选):提交内容的详细描述。

footer(可选):任何额外的信息,例如关联的 issue 编号、BREAKING CHANGE 等。

一般来讲,如果不是强制要求,只需type:description就行。

引用lint-staged

lint-staged主要作用是对那些已经通过 git add 暂存的文件运行linters进行检测。

首先执行命令:

pnpm add lint-staged -D -w

package.json文件中配置:

"scripts": { 
    ...
    "lint-staged": "lint-staged" 
},
"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,vue}": [
      "eslint --ext .js,.jsx,.vue,.ts,.tsx --fix --quiet ./",
      "stylelint --fix \"packages/components/src/**/*.{css,less}\""
    ]
  }

接着在.husky文件夹下新增 pre-commit 内容如下:

pnpm run lint-staged

最后可以尝试提交一个不规范的commit mssage:

commit.png

结语

image.png 如有错误欢迎纠正~