上一篇我们介绍了git hooks的挂载工具Husky。我们可以通过配置Husky的方法在pre-commit的钩子上使用eslint来检测自己的代码风格。虽然eslint有自己的文件过滤配置,但还是会在匹配的文件中遍历所有文件,不仅会占用过多的性能,还会将其他人的代码一起格式化,也会使代码检测的过程变得很缓慢。无法达到我们最初的想法,所以我们在这里引入Lint-staged,Lint-staged可以仅仅过滤出Git代码暂存区的文件,来进行我们配置的代码规则检测。
安装
npm install --save-dev lint-staged
配置
// package.json
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,vue}": [
"eslint --fix",
"git add"
]
},
Lint-staged也可以使用.lintstagedrc
,lint-staged.config.js
配置文件,可以不放在package.json
中。
Lint-staged仅仅对文件进行一次过滤,并不会直接对文件进行处理,所以对文件的处理我们仍然需要引用eslint来实现。
具体流程为,当文件发生变化时,我们执行git commit
命令,Husky就会触发pre-commit
钩子,进而执行lint-staged
的命令。上述的命令配置为,暂存区的所有js及vue文件,都需要通过eslint的检查,如果通过eslint可以直接格式整理的会整理格式后重新add该文件。如果有“==”这种无法自动格式化的文件,会在git commit
时报错并提交失败
其他说明
对于文件过滤配置,lint-staged
的格式如下:
{
// .js 工程中所以js文件
"*.js": "eslint",
// .js src目录下的js文件
"src/*.js": "eslint",
}
因为Lint-staged只是对文件的过滤,所以不仅仅局限于配置eslint检验,在配置的数组中可以支持更多的写法。值得我们去进一步的开发。