ESLint+Prettier+Husky+CommitLint, 保证Git提交代码规范化

376 阅读3分钟

本文篇幅不长,主要提供一个索引的作用,安装流程直接参见各工具的官网,一手资料更新快、Bug少。

之前参考了几篇文章都或多或少因为工具的更新而有一些问题,所以还是直接看官方文档的setup指南好啊。

Prettier

Prettier是一个Opinionated的代码格式化工具,仅提供非常有限的配置选项,意欲减少代码格式化配置项的分歧。官网:Prettier · Opinionated Code Formatter。 安装方法按官网提示: Install · Prettier。npm/yarn install之后, 创建配置文件即可。还可以添加ignore文件指定prettier不需格式化的文件。

安装完成之后,运行npx prettier --write <目标文件/路径>手动对目标文件进行格式化。

npx可以帮你随意运行一个本地或远程的npm包,具体见 npx | npm Docs (npmjs.com)

ESLint

ESLint是一个开源的 JavaScript 代码检查工具。通过静态分析,帮助程序员在编码阶段就找到错误。ESLint - Pluggable JavaScript linter - ESLint中文 同样也支持TypeScript,TSLint已停止更新。

按照官网提供的教程,安装ESLint:Getting Started with ESLint - ESLint中文 。其中,在教程生成配置文件一步,windows系统中的文件是相应目录下的/.bin/eslint.cmd,注意后缀名,后续类似的步骤同上。按官网的步骤是通过回答问题的方式生成配置文件,按自己所需选择即可。

安装完成后,运行npx eslint <目标文件/路径>,验证ESLint。

整合ESLint和Prettier

ESLint同时也提供代码格式检查的功能,它和Prettier的功能有所重合,具体细分参考Prettier vs. Linters · Prettier

为了避免冲突,首先安装eslint-config-prettier插件,作用是关闭ESLint中有关格式的配置。然后安装 eslint-plugin-prettier插件,将Prettier的规则融入进ESLint。安装步骤按照 github.com/prettier/es…

Husky和Lint-staged

GitHub - typicode/husky: Modern native Git hooks made easy 🐶 woof!

Husky(哈士奇)会帮助你咬住Git的"Hook",帮助你在目标Git阶段执行对应的脚本。Lint-staged对staged的代码(也就是即将被Commit的代码)进行Linting(静态代码检查),从而规避不必要的错误影响整个仓库的风险。

Husky和Lint-staged最快的安装方法是直接运行:

npx mrm@2 lint-staged

(来自GitHub - okonet/lint-staged: 🚫💩 — Run linters on git staged files

单步的安装方法拆解如下:

Husky在不同包管理器下的安装步骤参见:Automatic (recommended) (typicode.github.io)。在这一步后,package.json中添加了Husky的依赖,并设置准备阶段就安装Husky。

下一步,安排Husky“咬”上Git的Hooks。Git的Hook种类参见: Git - githooks Documentation (git-scm.com)。 按照Create a hook (typicode.github.io)的步骤,添加Hook之后,.\husky目录下就会出现一个对应的hook名文件,文件里会出现刚刚添加的指令。 和Lint-stage结合起来,指令改为npx lint-staged

Lint-stage的配置则主要参考:GitHub - okonet/lint-staged: 🚫💩 — Run linters on git staged files 在package.json中,比如:

"lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "npm run lint",
      "git add ."
    ]
  }

此处的lint为package.json的script中定义的脚本,例如:

"script":{
...
    "lint": "eslint src --fix --ext .ts,.tsx "
}

这样,在pre-commit阶段,就会自动对目标文件执行设定好的lint操作了。 实际运行中,即运行git commit的命令时执行。如果ESLint不通过,则无法Commit。

CommitLint

CommitLint会对Commit信息进行标准化检查。安装方式参考:Local setup (commitlint.js.org) 按照官方文档的步骤,会直接创建默认规则的设置文件。

然后继续按照以上文档,给Husky添加要咬的Hook:

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'

然后commit的信息就必须按照格式啦~ 规范的Commit格式可以看Conventional Commits查看各种规则和示例。

参考:

  1. Prettier 完全指南,以及和 Git、VSCode、ESLint 整合,让你的代码变美丽 (qq.com)
  2. 前端代码风格实践 prettier + ESLint + Git Hook + lint-staged - SegmentFault 思否
  3. 在Typescript项目中,如何优雅的使用ESLint和Prettier - SegmentFault 思否
  4. 使用eslint和githooks统一前端风格 - SegmentFault 思否