husky7 + commitlint + lint-staged 记录

husky 在现代前端项目是必不可少的组件了,重构业务项目时依赖都升级到新版,发现 husky 还是在用低版本的,索性升级到最新的。
husky5 开始版本有了重大变化,旧的配置方式无法直接使用,需要重新配置一下。

安装

npm install -D husky

检测提交 commit 提交记录是否符合规范需要 commitlint

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

检测提交暂存区的代码是否合规需要 lint-staged

npm install -D lint-staged

配置

lint-staged

package.json 文件中添加相关配置

"lint-staged": {
  "*.{js,ts}": "eslint --fix"
}

commitlint

在项目下新建文件 commitlint.config.js 文件写入配置

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

也可以添加自定义配置规则,相关文档 commitlint rules

husky

上面已经配置好了相关依赖,我们需要使用 husky 将他们与实际操作关联起来。

网上及官方文档提供的命令无法在我本机跑起来,有部分命令像是 husky add 只能使用 yarn 执行成功,所以这里主要使用手动添加的方式说明。

package.json 中添加新的 scripts (对应命令:npm set-script prepare "husky install"

"scripts": {
  "prepare": "husky install"
}
prepareNPM 操作生命周期中的一环,在执行 install 的时候会按生命周期顺序执行相应钩子:
NPM7preinstall -> install -> postinstall -> prepublish -> preprepare -> prepare -> postprepare 文档 npm7 scripts
NPM6preinstall -> install -> postinstall,同时也会触发 prepublishprepare 文档 npm6 scripts

执行 npm run prepare ,在项目下会生成一个 .husky 文件夹,用户可以在其中配置相关 git hooks

.husky 下添加一个文件,名称为相关 git hooks 的名称。

添加 pre-commit 文件,写入配置(对应命令:npx husky add .husky/pre-commit "npx lint-staged --allow-empty $1"

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

npx lint-staged --allow-empty $1

这样就与 lint-staged 关联起来了,在提交代码的时候就会按 lint-staged 配置去检测文件。

添加 commit-msg 文件,写入配置(对应命令:npx husky add .husky/commit-msg "npx commitlint --edit $1"

这样在提交时会检查 commit 信息是否符合开发规范

git hooks中,提交时的钩子有:pre-commit 提交之前执行(git commit --no-verify 可以跳过此阶段) -> prepare-commit-msg 启动提交信息编辑之前 -> commit-msg 填写提交信息之后 -> post-commit 提交过程结束最后。 相关文档 Git Hooks

测试

最后可以提交一个不规范的文件测试一下,看看配置的钩子是否有正常运行。

旧版升级

旧版的升级其实差不多,就是将 package.json 中的配置信息移动到外部文件中,并且添加一个NPM的生命周期。 husky 官方也有提供一个升级工具,可以试一试 husky-4-to-7


01小径
在路上,遇见了一只BUG,我将它抓住,收藏在了这里。<( ̄︶ ̄)>
651 声望
14 粉丝
0 条评论
推荐阅读
Theia 开发环境搭建
Node.js >= 16.14.0 and < 17.If you are interested in Theia's VS Code Extension support then you should use a Node version at least compatible with the one included in the version of Electron ...

LnEoi1阅读 180

正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青57阅读 8.7k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy49阅读 7.4k评论 12

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 7k评论 12

封面图
CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^&lt...

XboxYan48阅读 3.4k评论 14

封面图
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs32阅读 3.6k评论 5

封面图
还在用 JS 做节流吗?CSS 也可以防止按钮重复点击
举个例子:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,比如只允许每300ms提交一次,这时候我想大部分同学都会到网上直接拷贝一段throttle函数,或者直接引用lodash工具库

XboxYan35阅读 2.8k评论 2

封面图
651 声望
14 粉丝
宣传栏