前言
我在看的时候发现,在CLI服务
下有一个Git Hook
。
在安装之后,
@vue/cli-service
也会安装 ,它会让你在package.json
的gitHooks
字段中方便地指定 Git hook:
{ "gitHooks": { "pre-commit": "lint-staged" }}复制代码
是尤大fork自,内置到了@vue/cli
中。
看到这我想到了一个问题,我在搭vue架子的时候githook用的就是,那么问题来了,既然@vue/cli
中已经内置了,我为什么还要在装一遍,所以就有了下面的故事。
故事
多装一个让我觉着很是多余,可能是强迫症吧。所以我就到package.json
中直接把"husky": "^1.3.1"
删除了,舒服了很多,按照文档一顿操作猛如虎
打开husky.config.js
, 复制,删除
module.exports = { hooks: { 'pre-commit': 'npm run fix', 'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS' }};复制代码
打开package.json
,粘贴,稍加修改
{ "gitHooks": { "pre-commit": "npm run fix", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" }}复制代码
大功告成,试探性操作?
git commit -m "test"复制代码
结果:成功!
我简直就是天才,哈哈。等等,成功?fix没有工作,commitlint没有工作。
稍加思考
gitHook文件存储在.git/hooks
中,先去看一眼发生了什么
打开.git/hooks/commit-msg
#!/bin/sh# husky# Hook created by Husky# Version: 1.3.1# At: 2019-4-10 21:26:25# See: https://github.com/typicode/husky#readme...复制代码
Hushy?不是删除了吗?是因为删除姿势不正确吗?
npm uninstall husky复制代码
再看一下.git/hooks/commit-msg
已经被删除了,很满意。
再次试探
git commit -m "test"复制代码
结果:成功! 想看个失败咋就这么难呢。
再次思考
安装的时候对.git/hooks
里的钩子进行了更改,那么在用@vue/cli
创建项目的时候也会对.git/hooks
里的钩子进行更改,所以再次安装也会改变,没错,答案只有一个。
npm i yorkie复制代码
看一下.git/hooks/commit-msg
#!/bin/sh#yorkie 2.0.0command_exists () { command -v "$1" >/dev/null 2>&1}...复制代码
果然是这样的,第三次试探
git commit -m "test"复制代码
结果:失败!终于失败了。
Error: Recieved 'HUSKY_GIT_PARAMS' as value for -E | ...复制代码
此处的环境变量忘记修改,在中也没有找到。看了下.git/hooks/commit-msg
中应该是GIT_PARAMS
。
最终结果:fix工作,commitlint工作。
大功告成???
冷静分析
- 类似的工具在安装的时候会创建相关钩子
npm
在install
和uninstall
的时候可以执行脚本 --- 删除依赖不要在
package.json
中直接删除,而是用npm uninstall
来删除 - 官方文档要多看,会发现很多惊喜
- 遇到问题要多尝试,文档加源码,干就完了