Git钩子工具lefthook

[复制链接]
发表于 2026-2-12 00:04:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
lefthook 是什么

lefthook是由 Go 语言开发的实用于多种编程语言项目标快速且强大的 Git 钩子管理器,它可以在项目构建过程中实行一些使命,比方查抄代码格式、查抄依靠、测试、覆盖率查抄、静态分析、连续集成等。官方先容它的几个特点:
快速,它是用 Go 编写的,可以并行运行下令。
强大,它可以控制实行通过下令通报的实行和文件。
简单,它是一个无依靠的二进制文件,可以在任何情况中工作。
下面看看我们怎样在 Git 堆栈中利用 lefthook。
安装 lefthook
  1. npm install lefthook --save-dev
复制代码
安装完成后会在项目标根目次下创建一个 lefthook.yml 文件,如果没有产生的话也可以自己创建一个。lefthook 的设置文件可以利用下面这些文件名。

  • lefthook.yml
  • .lefthook.yml
  • lefthook.yaml
  • .lefthook.yaml
  • lefthook.toml
  • .lefthook.toml
  • lefthook.json
  • .lefthook.json
一个例子

看一个简单的例子,看看 lefthook 怎么利用,修改 lefthook.yml 文件,界说 pre-commit,post-commit,pre-push 三个钩子,如下所示:
  1. pre-commit:
  2.   parallel: true
  3.   scripts:
  4.     "pre-commit.sh":
  5.       runner: bash
  6. post-commit:
  7.   parallel: true
  8.   scripts:
  9.     "post-commit.sh":
  10.       runner: bash
  11. pre-push:
  12.   parallel: true
  13.   scripts:
  14.     "pre-push.js":
  15.       runner: node
复制代码
这里界说了三个钩子,分别对应 .lefthook/pre-commit/pre-commit.sh,.lefthook/post-commit/post-commit.sh,.lefthook/pre-push/pre-push.js 三个脚本。这里脚本路径必须放在对应的钩子文件夹下,内容如下:

  • .lefthook/pre-commit/pre-commit.sh
  1. #!/bin/sh
  2. echo 'pre-commiit ...'
复制代码

  • .lefthook/post-commit/post-commit.sh
  1. #!/bin/sh
  2. echo 'post-commiit ...'
复制代码

  • .lefthook/pre-push/pre-push.js
  1. console.log('pre-push ...');
复制代码
接下来,实行 git commit 下令,来触发 pre-commit 和 post-commit hooks。
  1. $ git commit -m 'test' src/index.ts
  2. ╭──────────────────────────────────────╮
  3. │ 🥊 lefthook v1.6.7  hook: pre-commit │
  4. ╰──────────────────────────────────────╯
  5. sync hooks: ✔️ (pre-commit, pre-push, post-commit, post-push)
  6. ┃  pre-commit.sh ❯
  7. pre-commiit ...
  8.   ────────────────────────────────────
  9. summary: (done in 0.05 seconds)      
  10. ✔️  pre-commit.sh
  11. ╭───────────────────────────────────────╮
  12. │ 🥊 lefthook v1.6.7  hook: post-commit │
  13. ╰───────────────────────────────────────╯
  14. ┃  post-commit.sh ❯
  15. post-commiit ...
  16.   ────────────────────────────────────
  17. summary: (done in 0.13 seconds)      
  18. ✔️  post-commit.sh
  19. [main 98d62d5] test
  20. 1 file changed, 1 insertion(+), 1 deletion(-)
复制代码
实行 git push 下令,来触发 pre-push hook。
  1. $ git push
  2. ╭────────────────────────────────────╮
  3. │ 🥊 lefthook v1.6.7  hook: pre-push │
  4. ╰────────────────────────────────────╯
  5. ┃  pre-push.js ❯
  6. pre-push ...
  7.   ────────────────────────────────────
  8. summary: (done in 1.98 seconds)      
  9. ✔️  pre-push.js
  10. ...
复制代码
上面例子仅仅演示了 lefthook 怎么在 Git 下令的差异阶段触发钩子脚本,这里只界说了三个钩子并简单的打印了一些字符串,在实际应用中,你可以利用 lefthook 的差异钩子来自动实行一些使命,这些使命可以直接写在 lefthook 的设置文件中,也可以写成一个单独的脚本文件,然后通过 lefthook 调用。
又一个例子

下面看一个实际的应用场景,在利用 Git 下令提交接码时,利用 eslint 静态分析代码质量,利用 prettier 格式化代码。
设置 lefthook

修改 lefthook.yml 文件,内容如下:
  1. pre-commit:
  2.     parallel: true
  3.     commands:
  4.         eslint:
  5.             glob: "*.{js,ts,jsx,tsx}"
  6.             run: yarn eslint "{staged_files}"
  7.         prettier:
  8.             glob: "*{js,ts,jsx,tsx,html,md,yml,yaml,json}"
  9.             run: yarn prettier --write "{staged_files}"
复制代码
安装设置 eslint

ESLint 是一个代码静态分析工具,静态分析代码以快速发现标题。ESLint 做了两件事,一件是修复代码质量,另一件就是修复代码格式。但 ESlint 的代码格式做的不敷彻底,以是反面会利用 prettier 来增强。

  • 安装 eslint
  1. $ npm install -D eslint eslint-config-prettier
复制代码

  • 设置 eslint
  1. $ npm init @eslint/config (根据自己项目情况选择,命令执行后会在根目录下生成 .eslintrc.js 文件)
复制代码
安装设置 prettier


  • 安装 prettier
  1. $ npm install --save-dev --save-exact prettier
复制代码

  • 设置 prettier
在项目根目次下创建 .prettierrc 文件,这里简单设置了几项
  1. {
  2.     "printWidth": 120,
  3.     "tabWidth": 4,
  4.     "useTabs": false,
  5.     "endOfLine": "lf",
  6.     "trailingComma": "es5"
  7. }
复制代码
在项目根目次下创建 .prettierignore 文件
  1. node_modules/
  2. dist/
复制代码
测试

实行 git commit 下令,可以看到 eslint 和 prettier 自动实行了,而且代码已经自动修复和格式化了。
  1. $ git commit -m 'test' src/index.ts
  2. ╭──────────────────────────────────────╮
  3. │ 🥊 lefthook v1.6.7  hook: pre-commit │
  4. ╰──────────────────────────────────────╯
  5. │  pre-commit.sh (skip) not specified in config file
  6. ┃  prettier ❯
  7. yarn run v1.22.19
  8. $ /Users/fkong/workspace/GitHub/kongxx/my-express/node_modules/.bin/prettier --write src/index.ts
  9. src/index.ts 296ms
  10. ✨  Done in 0.78s.
  11. ┃  eslint ❯
  12. yarn run v1.22.19
  13. $ /Users/fkong/workspace/GitHub/kongxx/my-express/node_modules/.bin/eslint src/index.ts
  14. ✨  Done in 1.86s.
  15.                                       
  16.   ────────────────────────────────────
  17. summary: (done in 2.15 seconds)      
  18. ✔️  prettier
  19. ✔️  eslint
  20. ╭──────────────────────────────────────╮
  21. │ 🥊 lefthook v1.6.7  hook: commit-msg │
  22. ╰──────────────────────────────────────╯
  23. ╭───────────────────────────────────────╮
  24. │ 🥊 lefthook v1.6.7  hook: post-commit │
  25. ╰───────────────────────────────────────╯
  26. [main efed81d] test
  27. 1 file changed, 2 insertions(+), 2 deletions(-)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表