让前端飞Web前端之路

npm script工作流(十一) Git Hooks

2020-08-05  本文已影响0人  ZoranLee

主要内容


Git Hooks(钩子)

Git Hooks 用法:

STAGE_FILES=$(git diff --cached --name-only --diff-filter=ACM -- '*.vue' '*.js')
if test ${#STAGE_FILES} -gt 0
then
    echo '开始eslint检查'
    which eslint &> /dev/null
    if [[ "$?" == 1 ]]; then
        echo '没安装eslint'
        exit 1
    fi
    PASS=true
    for FILE in $STAGE_FILES
    do
                eslint $FILE
        if [[ "$?" == 1 ]]; then
      PASS=false
    fi
  done

  if ! $PASS; then
      echo "eslint检查没通过!"
      exit 1
  else
      echo "eslint检查完毕"
  fi
else
    echo '没有js文件需要检查'
fi
exit 0

Git hooks 跳过验证 --no-verify

git commit --no-verify –m"XXX"

使用 --no-verify(简写为 -n) 参数跳过本地检查时,本地检查就形同虚设;

Git Hooks 和 前端结合产物

相比较而言 husky 更好用,它支持更多的 Git Hooks 种类

husky 和 lint-staged的使用

npm i husky lint-staged -D
# npm install husky lint-staged --save-dev
# yarn add husky lint-staged -D
  {
"scripts": {
    "test": "jest",
    "format": "prettier --single-quote --no-semi --write **/*.js",
    "install": "node ./bin/install.js",
    "uninstall": "node ./bin/uninstall.js"
  }
}
   "scripts": {
+    "precommit": "npm run lint",
+    "prepush": "npm run test",
     "lint": "npm-run-all --parallel lint:*",
     "lint:js": "eslint *.js",

然后尝试提交代码:git commit -am 'add husky hooks',能看到 pre-commit 钩子已经生效,如图:

image.png

用 lint-staged 改进 pre-commit

   "scripts": {
-    "precommit": "npm run lint",
+    "precommit": "lint-staged",
     "prepush": "npm run test",
     "lint": "npm-run-all --parallel lint:*",
   },
+  "lint-staged": {
+    "*.js": "eslint",
+    "*.less": "stylelint",
+    "*.css": "stylelint",
+    "*.json": "jsonlint --quiet",
+    "*.md": "markdownlint --config .markdownlint.json"
+  },
   "keywords": [],

接下来我们故意在 index.js 中引入错误:

-  return NaN;
+  return NaN

然后尝试提交这个文件:git commit -m 'try to add eslint error' index.js,结果如下图:

image.png

带有 Running Tasks 字样的列表就是 lint-staged 根据当前要提交的文件和 package.json 中配置的检查命令去执行的动态输出。红色框里面提示 husky 的 pre-commit 钩子执行失败,提交也就没有成功。

上一篇 下一篇

猜你喜欢

热点阅读