git commit提交前检测husky 及try catch

14111次浏览

前言

几乎所有项目现在都在用git了,之前的SVN已经很少用,很久之前还写过git的相关操作文章https://www.haorooms.com/post/git_common_ml 工程化的发展,对codeReview和代码质量有了较高的要求。也出现了很多git提交前代码校验的工具,git钩子插件。今天主要介绍一下husky,及js的try catch 这两个小的知识点吧。

husky 介绍

husky能够防止不规范代码被commit、push、merge等等。 首先安装husky

npm install husky --save-dev

yarn add husky --dev

编辑package.json文件,如:

     "husky": {
        "hooks": {
          "pre-commit": "npm run lint-staged"// 执行相关代码校验
        }
      },

  "scripts": {
    "lint-staged": "lint-staged",
    "lint-staged:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty",
  },

  "lint-staged": {
    "**/*.less": "stylelint --syntax less",
    "**/*.{js,jsx,tsx,ts,less,md,json}": [
      "prettier --write",
      "git add"
    ],
    "**/*.{js,jsx}": "npm run lint-staged:js",
    "**/*.{js,ts,tsx}": "npm run lint-staged:js"
  },

当你git commit的时候,将会现现执行 precommit里的脚本,没有问题了再提交。

try catch

文章太短,再介绍一个小的知识点,就是try catch。try catch我们很常用,但是滥用会有性能问题,所有我们要慎用! try catch语法如下:

try {
    //可能会导致错误的代码
} catch (error) {
    //在错误发生时怎么处理
}finally {
     //即使报错始终执行
 }

因为在运行try catch时,需要将当前的词法环境和作用域全部分别添加到catch和Finally所要执行的代码块中。可以推断出try catch是消耗性能的。 通过对比如下两组数据

//没有加try catch
(function () {
  var i = 0;
     i++;
}())
//有try catch
(function () {
  var i = 0;
    try {
      i++;
    } catch (ex) {
    } finally {
    }
}())

发现有try catch的一组数据,确实消耗性能比较大。

try catch无法捕获异步请求错误

try {
    setTimeout(()=>{
        const A = 1
        A = 2
    },0)
} catch (err) {
    // 这里并不能捕获回调里面抛出的异常
    console.log("-----haorooms catch error------")
    console.log(err)
}

慎用try catch

try catch最适合处理那些我们无法控制的错误,如I/O操作等,后端nodeJs或java读取I/O操作比较多比如读数据库,所以用try catch比较多。前端可以用在上传图片、使用别人的js库报错、async await同步调接口等地方适用。

但是大部分前端客户端代码处理都不怎么依赖环境也没有I/O操作,都是自己写的代码,在明明白白地知道自己的代码会发生错误时,再使用try catch语句就不太合适了,对应数据类型的错误,建议用解构赋值指定默认值、&&和||来规避,所以慎用try catch。

Tags: gitcommithuskypre-commit

相关文章:

  1. lililala6868
    1
    但是大部分前端客户端代码处理都不怎么依赖环境也没有I/O操作,都是自己写的代码