其实这个命题稍微有点大,我们缩小一下,只叙述在我们的工作环境下:
如何提交代码都会自动做代码检测:
现在基本代码都是依赖 git 来托管,对 git 有了解的同学一般都会联想到 git hoos 可以做一些前置脚本,不了解的可以稍微看一下:
1、What is hooks?
git hooks 被称为钩子,在被特定的 git 事件触发前后被调用。
包含 2 类:本地和服务端
2、Where is hooks?
默认 git 的项目里面多会带有一个 .git 的文件,里面有一个 hooks 文件夹
3、How to use hooks?
本文只展示高频使用的,其他可以看官方链接
一般用来在提交代码前做代码检查 (lint 之类)
会被 git commit 调用,不过可以添加 --no-verify 跳过
如果返回值不是 0,那么 git commit 命令会中止
但是大部分的人应该对 hook 里面的具体代码比较陌生,为了简化学习成本,小编推荐一个用了很久的工具包:
husky
Prevents bad commit or push (git hooks, pre-commit/precommit, pre-push/prepush, post-merge/postmerge and all that stuff...)
如何使用?
npm install husky --save-dev
然后修改你的 package.json 增加对提交代码之前的代码 lint 检测
"scripts": {
"precommit": "npm test"
然后你每次执行 git commit 的时候都会自动执行 npm test
大部分的同学其实到这里基本就满足你的需求了,但是我相信还是有一小部分希望看看那个神奇的工具包到底做了什么?
其实很简单,内置了一些 hoos 的脚本
写入到项目 .git 中
我们可以看看 pre-commit 的代码:
#!/bin/sh
# husky
cd .
[ -f package.json ] && cat package.json | grep -q '"precommit"\s*:'
[ $? -ne 0 ] && exit 0
export NVM_DIR="/Users/yaochun/.nvm"
BREW_NVM_DIR="/usr/local/opt/nvm"
[ -s "$BREW_NVM_DIR/nvm.sh" ] && . "$BREW_NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
command -v nvm >/dev/null 2>&1 && [ -f .nvmrc ] && nvm use
command -v npm >/dev/null 2>&1 || { echo >&2 "husky - can't find npm in PATH. Skipping precommit script in package.json"; exit 0; }
npm run precommit
if [ $? -ne 0 ]; then
echo
echo "husky - pre-commit hook failed (add --no-verify to bypass)"
echo
exit 1
建议部分对工程自动化相关的同学除了积累 nodejs 工具包之外,最好也学习一下 sh 的一些基本写法