git 提交时自动格式化代码

简单记录一下配置过程,使用 husky、prettier 和 lint-staged,使项目可以在提交代码时自动格式化。

2021-8-31 更新配置方案

不知不觉 husky 已经升级到 v7,eslint 也有所更新所以特此更新一波

依赖简介

  • git 代码管理工具
  • husky 快捷配置 git 提交钩子,可以在代码提交的各个阶段对代码进行一定操作
  • prettier 按照规则对代码进行格式化
  • lint-staged 对提交的代码进行进行操作,避免每次都对整个项目的代码进行格式化
  • eslint 可以对代码风格进行检查与格式化(格式化部分会与 prettier 有所不同,故推荐先用 prettier 格式化再调用 eslint)

配置

因为配置越来越简单了,所以这里推荐一次性安装所有依赖

npm install --save-dev prettier husky lint-staged

剩下的就是执行几个命令,推荐阅读官方文档

这边主要说一下配合 eslint 的使用方式

eslint

eslint 主要还是用来在代码编写的时候,配合编辑器的插件(例如 vscode 的 eslint)进行代码风格提示,因为有一些代码问题是无法自动修复的。

eslint 依旧推荐官方的配置教程

如果需要对 ts、tsx 进行检测那么你应该还会需要@typescript-eslint/eslint-plugin@typescript-eslint/parsereslint-import-resolver-typescript

如果要和 prettier 和谐使用(先 prettier 后 eslint),那么你还需要 prettier-eslint-cli

以下是一批可能会用到的 eslint 依赖

  • eslint-config-standard
  • eslint-import-resolver-typescript
  • eslint-plugin-import
  • eslint-plugin-node
  • eslint-plugin-promise
  • eslint-plugin-react
  • eslint-plugin-react-hooks

以下为旧方案,不推荐使用

配置 prettier

prettier 用来进行代码格式化。

  • 安装 prettier
npm install --save-dev --save-exact prettier
  • 在根目录新建 .prettierrc.json 文件,内容为 {} 即可。主要用作提示其他开发者和 ide 本项目使用 prettier 进行代码格式化

  • 在根目录新建 .prettierignore 文件,配置哪些文件、目录不需要进行格式化

配置 husky 和 lint-staged

husky 用来执行 git 的提交钩子,主要使用提交前钩子 pre-commit,lint-staged 用来过滤哪些文件需要被格式化。

  • 安装 husky
npm install husky --save-dev
  • 安装 lint-staged
npm install lint-staged --save-dev
  • 在 package.json 添加配置

不需要在命令中添加 git add,因为 husky 会自动执行这一步

{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,css,md}": ["prettier --write"]
  }
}

配置完后,git commit 时就会自动格式化了

钩子配置文件丢失

有时候会发现钩子不会正常触发,查看.git/hooks 文件夹可以看到 husky 的钩子全没了,只剩下.sample 文件。但是 npm rebuild 也没用。

此时建议将代码备份或者先 push 到远程,然后删掉整个本地项目,重新从远端 clone 并安装依赖即可。npm 不行就用 yarn,相信一下玄学。
rebuild