写在前面
那么我们可以在
所以这个
了解 githooks
Git Hooks 就是在 Git 执行特定事件(如commit、push、receive等)时触发运行的脚本,类似于“钩子函数”,没有设置可执行的钩子将被忽略。
在项目的
【但是,我们一般不去改动
husky
- husky 的安装
1 | npm i husky -D --registry=https://registry.npm.taobao.org |
husky 在安装过程中会在
需要注意的是:你要留意 husky 的安装信息,是否为你安装了
git 钩子。
如果安装正确的话,可以看到 husky 会打印出如下消息:
1 2 3 | > node husky install husky > setting up git hooks husky > done |
但也有可能:
这个就是由于电脑
OK,假设你的
我们在
1 2 3 4 5 | "husky": { "hooks": { "pre-commit": "echo \"git commit trigger husky pre-commit hook\" " } } |
这样,在
从 1.0.0 开始,husky 的配置可以使用
钩子中执行多个命令
- 根据 npm script 的规则,使用 &&
1 2 3 4 5 | "husky": { "hooks": { "pre-commit": "echo \"git commit trigger husky pre-commit hook\" && npm run test" } } |
- 如果您更喜欢使用数组,建议的方法是在
.huskyrc.js 中定义它们
1 2 3 4 5 6 7 8 9 10 | const tasks = arr => arr.join(' && ') module.exports = { 'hooks': { 'pre-commit': tasks([ 'npm run lint', 'npm run test' ]) } } |
hook 拦截
为了阻止提交,
如果您的提交未被阻止,请检查脚本退出代码。
当然 husky 不止能验证
lint-staged
1 2 3 4 5 6 7 8 9 | // package.json "lint-staged": { "src/**/*.{js,vue}": [ "prettier --write", "eslint --cache --fix", "git add" ] } |
这里
结合我们前面介绍的 husky,配合 husky 的 pre-commit 钩子,将会形成一个自动化工具链。
1 2 3 4 5 6 7 8 | "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "src/**/*.{js,vue}": ["prettier --write", "eslint --cache --fix", "git add"] } |
在 commit 之前,将暂存区的内容做一次 代码检查 和 代码美化,然后再添加到暂存区;然后再 commit,完美!!
从 v3.1 开始,您现在可以使用不同的方式进行 lint-staged 配置:
- lint-staged 在你的对象 package.json
- .lintstagedrc JSON或YML格式的文件
- lint-staged.config.js JS格式的文件
- 使用 --config 或 -c 标志传递配置文件
mrm
mrm 是一个自动化工具。推荐
它将根据
安装 mrm 并执行 lint-staged 任务:
1 2 | npm i mrm -D --registry=https://registry.npm.taobao.org npx mrm lint-staged |
此时,将会自动给你安装相关依赖工具,以及相关配置文件。
mrm 文档、mrm api doc
关于 prettier 的问题
prettier 是一个很好的格式化代码的插件,但对已经有一定迭代完成度的代码不推荐使用。使用该插件后,它会将原有的代码也进行格式化,造成很多不可知的问题,我就是前车之鉴,使用 prettier 后,原本已经没有 eslint 问题的代码,又多出了更多的不知道什么原因的报错,只能将代码回退处理。
所以,这也就是我们为什么在
写在最后
我的主页: https://neveryu.github.io/index.html
QQ群:685486827、832485817