git commit提交前检测husky 及try catch

23,833次阅读
没有评论

共计 1476 个字符,预计需要花费 4 分钟才能阅读完成。

前言

几乎所有项目现在都在用 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。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1476字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)