使用 ESLint 和 husky 集成 git hook,自动检测代码规范

在团队协作开发中,保证代码质量和风格的一致性显得尤为重要,因为良好的代码规范能够增强代码的可读性、可维护性和可扩展性。而在前端开发中,使用 ESLint 和 husky 可以非常方便地实现自动检测代码规范。

ESLint

ESLint 是一个用于检测 JavaScript 代码中潜在问题的工具。它能够在开发过程中提供自动提示、规范检查和错误报告,从而帮助开发者编写更加规范且易于维护的代码。在前端开发中,我们可以使用 ESLint 来检查 JavaScript、Vue、React 等代码的风格和正确性。

安装

在项目中安装 eslint:

npm install eslint --save-dev

配置

在项目根目录中创建文件 .eslintrc.js。这个文件会去配置 ESLint 的规则、插件、解析器等等。

以下是一个简单的示例:

module.exports = {
  env: {
    browser: true,
  },
  extends: [
    'eslint:recommended',
  ],
  parserOptions: {
    ecmaVersion: 2018, 
    sourceType: 'module',
  },
  rules: {
    "semi": ["error", "always"],
    "quotes": ["error", "double"]
  },
};

其中:

  • env:指定你的代码运行在哪个环境(如:browsernode 等等)。
  • extends:扩展的配置,即使用别人的配置文件,也可以是自定义的配置文件。
  • parserOptions:指定解析器选项(如:使用 ES6 规范、类型检测等等)。
  • rules:定义规则,也就是规定开发者需要遵守的代码规范。

与 VSCode 集成

如果你使用 VSCode 作为编辑器,可以安装 ESLint 插件,在编辑代码的时候看到 ESLint 的错误信息。同时你可以添加以下配置到 settings.json 文件中:

{
  "eslint.autoFixOnSave": true, // 自动修复
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "vue",
    "html"
  ]
}

ESLint 能够自动检测代码规范和错误,但有一个缺陷,就是每次都需要手动运行指令才能发现问题,这时候我们就需要一个自动化工具——git hooks。

husky

husky 是一个让你在 git hooks 中易于使用的工具。使用 husky,我们可以在 git commit 之前校验代码规范,从而保证代码的统一规范性。

安装

在项目中安装 husky:

npm install husky --save-dev

配置

在项目中创建一个新的 hooks 目录,并创建一个名为 pre-commit 的脚本:

mkdir -p .husky && touch .husky/pre-commit

然后,我们在 pre-commit 中加入以下内容:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

# Lint code
npm run lint
if [ $? -eq 0 ]; then
  exit 0
else
  echo "\n${RED}Lint check failed!${NC}\n"
  exit 1
fi

这段脚本的意思是,在每次 commit 前,运行 npm run lint 检查代码规范。如果检查不通过,则打印错误信息并且退出。

最后,我们需要将 husky 和 pre-commit 集成到 git hooks 中:

npx husky add .husky/pre-commit "npm run lint"

ok,至此,我们已经成功地将 ESLint 和 husky 集成到了 git hooks 中,以实现自动检测代码规范的目的。

总结

使用 git hooks、ESLint 和 husky 集成,可以在版本控制前对代码进行自动化检测,帮助我们防止代码风格不一致、功能缺陷等问题,提升代码规范性、可读性和可维护性。

如果你在前端开发中使用 ESLint 和 husky 的经验与我们不同,请欢迎在评论区中分享,让我们相互学习和进步。

示例代码

  1. eslint-demo
  2. husky-demo

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a77f80add4f0e0ff0a0343


纠错反馈