-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用 husky+lint-staged+prettier 优化代码格式 #45
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
使用 husky+lint-staged+prettier 优化代码格式
背景
团队协作中经常遇到这样的问题:
可以使用 linter 使代码风格统一。
可以使用 linter 命令来修复错误。比如 eslint 就可以
eslint --fix
。解决以上问题的一个方案就是,在提交代码的时候,自动修复格式问题,并且只修复自己改动的代码。
具体实现可以借助于 husky + lint-staged + prettier 这几个工具。
最终效果如下图所示:
使用
首先安装包 eslint 相关的包,如:
然后在项目根目录创建
.eslintrc
文件,并写入对应的配置,以eslint-config-airbnb
为例:.eslintrc
接下来再安装
prettier
lint-staged
和husky
:简单介绍一下几个工具:
prettier
用来优化代码格式,比如缩进、空格、分号等等husky
用于实现各种 Git Hook。这里主要用到pre-commit
这个 hook,在执行 commit 之前,运行一些自定义操作lint-staged
用于对 Git 暂存区中的文件执行代码检测接下来配置
package.json
:scripts
lint
检测 js 代码的 eslint 错误prettier
使用 prettier 优化代码的格式如果一个项目之前没有使用过 linter,现在加上了,并且需要处理所有的代码格式,就可以使用
tnpm run prettier
。--trailing-comma es5
表示使用 ES5 支持的拖尾逗号;--single-quote
表示使用单引号。prettier 的所有参数详见 https://prettier.io/docs/en/options.html。这些参数即可以在命令中配置,也可以使用配置文件
.prettierrc
来指定,如:在优化代码格式的时候,有些文件不需要进行处理,则可以通过
.prettierignore
文件来配置:husky
husky
里面定义了一些 Git 的钩子。上面的示例中,
"pre-commit": "lint-staged"
的含义就是在pre-commit
阶段(也就是 commit 之前)执行lint-staged
命令。lint-staged
如上所述,
lint-staged
在pre-commit
的时候执行。lint-staged
里面定义了需要对 Git 暂存区中的文件执行的任务。在该
package.json
示例中主要有一个任务:**/*.js
, 即对暂存区中所有 js 文件依次执行下面的操作:prettier --trailing-comma es5 --single-quote --write
eslint
git add
也就是先优化暂存区中的 js 代码格式,再进行 eslint 检测,最后再执行
git add
,将优化后的代码添加到暂存区。暂存区中的代码文件,就是这几个命令的参数。如果
eslint
步骤抛错了,则表示代码格式不符合 eslint 规范,进而导致pre-commit
这个钩子就会抛错,最终导致commit
操作失败。因为
eslint
也只会检测lint-staged
中的代码,也就是自己修改过的代码。所以即避免了影响他人代码,同时也避免了因他人代码格式问题造成自己的代码不能提交。其他
husky
和lint-staged
配合起来还有非常多的用处。比如删除已经被 Git 追踪的文件。
比如
run/
目录是代码运行时生成的目录。如果一开始没有将run/
添加到.gitignore
里面,则每个人提交代码的时候都会提交自己的run/
目录。由于每个人run/
目录里面的文件很可能不一致,所以很容易造成冲突。而且一旦文件已经被 Git 追踪,再将其添加到
.gitignore
里面,也无法在提交的时候忽略它。这个时候,就可以在
pre-commit
阶段,利用"lint-staged"
的任务删除暂存区里面的run/
。如下所示:
然后再在
.gitignore
里面添加上run/
,这样以后再提交代码的时候,就再也不会将run/
提交到 Git 仓库了。The text was updated successfully, but these errors were encountered: