极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# Git Hooks 与 Husky 原理解析与应用

git hooks 是前端项目在本地通用的质量保障手段。

npm script hook 也可对前端工程做质量加强,可见往日文章。

它在 git commitgit push 等 git 操作之前与之后可设置自动执行的脚本,被称为 git hooks 脚本。

代码在提交之前 (pre-commit hook),可做以下诸多校验,如未通过检验,则无法成功提交。

  • pritter: html、css、js、md、yaml 等代码格式化校验
  • eslint: 代码质量规范检测
  • commit message lint: 结构化语义化的 Commit 信息,可参考 Conventional Commits (opens new window)
  • test

# Git Hooks

在每一个使用 git 进行版本管理的仓库,都有一个目录 .git/hooks,包含 commit 各个阶段 hook 的脚本。

官方文档详见: githooks (opens new window)

$ ls -lah .git/hooks
applypatch-msg.sample     pre-merge-commit.sample
commit-msg.sample         pre-push.sample
fsmonitor-watchman.sample pre-rebase.sample
post-update.sample        pre-receive.sample
pre-applypatch.sample     prepare-commit-msg.sample
pre-commit.sample         update.sample
  • pre-commit: git commit 之前触发
  • pre-push: git push 之前触发

在 git 2.9 中引入了 core.hooksPath,可手动配置 git hooks 所在的目录。

# 可通过命令行配置 core.hooksPath
$ git config 'core.hooksPath' .husky

# 也可通过写入文件配置 core.hooksPath
$ cat .git/config
[core]
  ignorecase = true
  precomposeunicode = true
  hooksPath = .husky

# Git Hooks 初试

编辑 .git/hooks/pre-commit,设定以下脚本,在每次提交之前输出 ok

#!/bin/sh

echo ok

并设置该脚本为可执行权限

$ chmod 777 .git/hooks/pre-commit

提交一次,看看结果如何吧。在第一行确实有一个 ok,测试成功。

$ git commit -m 'test'
ok
[master 24d8f91] update
 Date: Wed Nov 3 11:39:50 2021 +0800
 1 file changed, 2 insertions(+), 1 deletion(-)

pre-commit 脚本中的命令改为 npm scripts,即可实现前端工程化的效果。

在每次提交之前自动校验代码风格:

#!/bin/sh

npm run lint

# 跳过 Git Hooks

由于 git hooks 是在客户端进行的校验,在客户端禁掉也是非常简单的。

$ git commit --no-verify

# 或者使用它的缩写
$ git commit -n

# Husky 是如何工作的?

husky (opens new window)

不同版本的 husky 工作原理略有不同,本文讲述 husky 6+ 的工作原理。

由于相邻版本的 husky 变更较大 (husky6 为分界线),如果你们项目中 husky 配置有问题,先确认 husky 版本号,再定位问题。

husky 做了两件事(需要 husky install 手动完成):

  1. 创建 ~/.husky 目录
  2. 设置 ~/.husky 目录为 git hooks 目录

而对于使用者而言,需要在 ~/.husky 目录下手动创建 hook 脚本

# 手动创建 pre-commit hook
$ vim .husky/pre-commit

pre-commit 中进行代码风格校验

#!/bin/sh

npm run lint
npm run test

此时,你有疑惑,husky 这么简单,这事儿我也能干!

是了,确实如此。husky 的源码十分简单,建议阅读。

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 11/3/2021, 3:39:50 AM