马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
lefthook 是什么
lefthook是由 Go 语言开发的实用于多种编程语言项目标快速且强大的 Git 钩子管理器,它可以在项目构建过程中实行一些使命,比方查抄代码格式、查抄依靠、测试、覆盖率查抄、静态分析、连续集成等。官方先容它的几个特点:
快速,它是用 Go 编写的,可以并行运行下令。
强大,它可以控制实行通过下令通报的实行和文件。
简单,它是一个无依靠的二进制文件,可以在任何情况中工作。
下面看看我们怎样在 Git 堆栈中利用 lefthook。
安装 lefthook
- 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 三个钩子,如下所示:- pre-commit:
- parallel: true
- scripts:
- "pre-commit.sh":
- runner: bash
- post-commit:
- parallel: true
- scripts:
- "post-commit.sh":
- runner: bash
- pre-push:
- parallel: true
- scripts:
- "pre-push.js":
- 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
- #!/bin/sh
- echo 'pre-commiit ...'
复制代码
- .lefthook/post-commit/post-commit.sh
- #!/bin/sh
- echo 'post-commiit ...'
复制代码
- .lefthook/pre-push/pre-push.js
- console.log('pre-push ...');
复制代码 接下来,实行 git commit 下令,来触发 pre-commit 和 post-commit hooks。- $ git commit -m 'test' src/index.ts
- ╭──────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: pre-commit │
- ╰──────────────────────────────────────╯
- sync hooks: ✔️ (pre-commit, pre-push, post-commit, post-push)
- ┃ pre-commit.sh ❯
- pre-commiit ...
- ────────────────────────────────────
- summary: (done in 0.05 seconds)
- ✔️ pre-commit.sh
- ╭───────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: post-commit │
- ╰───────────────────────────────────────╯
- ┃ post-commit.sh ❯
- post-commiit ...
- ────────────────────────────────────
- summary: (done in 0.13 seconds)
- ✔️ post-commit.sh
- [main 98d62d5] test
- 1 file changed, 1 insertion(+), 1 deletion(-)
复制代码 实行 git push 下令,来触发 pre-push hook。- $ git push
- ╭────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: pre-push │
- ╰────────────────────────────────────╯
- ┃ pre-push.js ❯
- pre-push ...
- ────────────────────────────────────
- summary: (done in 1.98 seconds)
- ✔️ pre-push.js
- ...
复制代码 上面例子仅仅演示了 lefthook 怎么在 Git 下令的差异阶段触发钩子脚本,这里只界说了三个钩子并简单的打印了一些字符串,在实际应用中,你可以利用 lefthook 的差异钩子来自动实行一些使命,这些使命可以直接写在 lefthook 的设置文件中,也可以写成一个单独的脚本文件,然后通过 lefthook 调用。
又一个例子
下面看一个实际的应用场景,在利用 Git 下令提交接码时,利用 eslint 静态分析代码质量,利用 prettier 格式化代码。
设置 lefthook
修改 lefthook.yml 文件,内容如下:- pre-commit:
- parallel: true
- commands:
- eslint:
- glob: "*.{js,ts,jsx,tsx}"
- run: yarn eslint "{staged_files}"
- prettier:
- glob: "*{js,ts,jsx,tsx,html,md,yml,yaml,json}"
- run: yarn prettier --write "{staged_files}"
复制代码 安装设置 eslint
ESLint 是一个代码静态分析工具,静态分析代码以快速发现标题。ESLint 做了两件事,一件是修复代码质量,另一件就是修复代码格式。但 ESlint 的代码格式做的不敷彻底,以是反面会利用 prettier 来增强。
- $ npm install -D eslint eslint-config-prettier
复制代码- $ npm init @eslint/config (根据自己项目情况选择,命令执行后会在根目录下生成 .eslintrc.js 文件)
复制代码 安装设置 prettier
- $ npm install --save-dev --save-exact prettier
复制代码 在项目根目次下创建 .prettierrc 文件,这里简单设置了几项- {
- "printWidth": 120,
- "tabWidth": 4,
- "useTabs": false,
- "endOfLine": "lf",
- "trailingComma": "es5"
- }
复制代码 在项目根目次下创建 .prettierignore 文件测试
实行 git commit 下令,可以看到 eslint 和 prettier 自动实行了,而且代码已经自动修复和格式化了。- $ git commit -m 'test' src/index.ts
- ╭──────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: pre-commit │
- ╰──────────────────────────────────────╯
- │ pre-commit.sh (skip) not specified in config file
- ┃ prettier ❯
- yarn run v1.22.19
- $ /Users/fkong/workspace/GitHub/kongxx/my-express/node_modules/.bin/prettier --write src/index.ts
- src/index.ts 296ms
- ✨ Done in 0.78s.
- ┃ eslint ❯
- yarn run v1.22.19
- $ /Users/fkong/workspace/GitHub/kongxx/my-express/node_modules/.bin/eslint src/index.ts
- ✨ Done in 1.86s.
-
- ────────────────────────────────────
- summary: (done in 2.15 seconds)
- ✔️ prettier
- ✔️ eslint
- ╭──────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: commit-msg │
- ╰──────────────────────────────────────╯
- ╭───────────────────────────────────────╮
- │ 🥊 lefthook v1.6.7 hook: post-commit │
- ╰───────────────────────────────────────╯
- [main efed81d] test
- 1 file changed, 2 insertions(+), 2 deletions(-)
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |