背书全家桶介绍husky是一个给git客户端添加hooks的工具。安装后会自动在仓库的.git/目录下添加相应的钩子;例如,执行gitcommit时会触发pre-commit钩子。我们可以在pre-commit中实现lint检查、单元测试、代码美化等操作。当然pre-commit阶段执行的命令一定要保证它的速度不能太慢,每次commit都要等很长时间的体验是不好的。lint-staged,一个只过滤掉Git代码暂存区文件(git添加的文件)的工具;这个很实用,因为如果我们检查整个项目的代码,可能会花很长时间,如果是老项目,如果要做代码规范检查修改之前的代码,可能会比较麻烦,这可能会导致项目发生很大的变化。所以这个lint-staged是团队项目和开源项目的好工具。它是对个人提交的代码的规范和约束。新版husky的工作原理新版husky从git2.9开始引入了一个新函数core.hooksPath。core.hooksPath允许你指定githooks所在的目录,而不是使用默认的.git/hooks/,这样husky就可以使用huskyinstall到githooks的目录指定为.husky/,然后使用husky添加命令以将挂钩添加到.husky/。这样我们就可以只添加我们需要的githooks,所有的脚本都存放在一个地方(.husky/目录),就不存在同步文件的问题了。新版husky+lint-staged实践1.安装huskynpmihusky--save-dev2.在package.json中添加preparescript{"scripts":{"prepare":"huskyinstall"}}3.执行preparescriptnpmrunprepare执行huskyinstall命令,会创建.husky/目录,并指定该目录为githooks所在目录。4、添加githooks,运行命令创建githooksnpxhuskyadd.husky/pre-commit"npmrunlint"运行这条命令后,我们会在.husky/目录脚本中看到一个名为pre-commit的新shell。也就是说,在执行gitcommit命令时,pre-commit脚本会先被执行。预提交脚本内容如下:#!/bin/sh。"$(dirname"$0")/_/husky.sh"npmrunlint这个脚本的作用是执行命令npmrunlint5.添加commit-msg脚本npxhuskyadd.husky/commit-msg'npx--no-installcommitlint--edit"$1"'commit-msg脚本内容如下:#!/bin/sh"$(dirname"$0")/_/husky.sh"npx--no-installcommitlint--edit"$1"6.安装lint-stagednpmilint-staged--save-dev7.在package.json文件中配置lint命令{"scripts":{"lint":"lint-上演”,}}8。在package.json中配置lint或在根目录中创建.lintstagedrc或lint-staged.config.js或lint-staged.config.js文件的命令从v3.1开始,您现在可以通过不同的方式配置lint-staged:lint-stagedinyourobjectpackage.json.lintstagedrcJSON或YML格式文件lint-staged.config.jsJS格式文件使用--config或-cjson文件:{"src/**/*.{js.vue}":["prettier--write","esslint--cache--fix","gitadd"]}示例:配置“usestrict”在lint-staged.config.js文件中;module.exports={ignore:["package-lock.json","CHANGELOG.md"],linters:{"*.ts":["prettier--write","eslint--fix","gitadd"],"*.js":["prettier--write","eslint--cache--fix","gitadd"],"*.vue":["prettier--write","eslint--cache--fix","gitadd"],"*.{json,md,yml,css}":["prettier--write","gitadd"]}commit前做代码检查和美化代码,然后添加到暂存区;然后commit9.自定义提交规范,安装npminstall--save-dev@commitlint/config-conventional@commitlint/cli//生成配置文件commitlint.config.js,当然也是可能yes.commitlintrc.jsecho"module.exports={extends:['@commitlint/config-conventional']};">commitlint.config.js自定义提交格式
