前言
我在看Vue CLI文件
的時候發現,在CLI服務
下有一個Git Hook
。
在安裝之後,
@vue/cli-service
也會安裝yorkie
,它會讓你在package.json
的gitHooks
欄位中方便地指定 Git hook:
{
"gitHooks": {
"pre-commit": "lint-staged"
}
}
複製程式碼
yorkie
是尤大fork自husky
,內建到了@vue/cli
中。
看到這我想到了一個問題,我在搭vue架子的時候githook用的就是husky
,那麼問題來了,既然@vue/cli
中已經內建了,我為什麼還要在裝一遍husky
,所以就有了下面的故事。
故事
多裝一個husky
讓我覺著很是多餘,可能是強迫症吧。所以我就到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"
複製程式碼
結果:成功! 想看個失敗咋就這麼難呢。
再次思考
安裝husky
的時候對.git/hooks
裡的鉤子進行了更改,那麼在用@vue/cli
建立專案的時候也會對.git/hooks
裡的鉤子進行更改,所以再次安裝yorkie
也會改變,沒錯,答案只有一個。
npm i yorkie
複製程式碼
看一下.git/hooks/commit-msg
#!/bin/sh
#yorkie 2.0.0
command_exists () {
command -v "$1" >/dev/null 2>&1
}
...
複製程式碼
果然是這樣的,第三次試探
git commit -m "test"
複製程式碼
結果:失敗!終於失敗了。
Error: Recieved 'HUSKY_GIT_PARAMS' as value for -E | ...
複製程式碼
此處的環境變數忘記修改,在yorkie
中也沒有找到。看了下.git/hooks/commit-msg
中應該是GIT_PARAMS
。
最終結果:fix工作,commitlint工作。
大功告成???
冷靜分析
husky
類似的工具在安裝的時候會建立相關鉤子npm
在install
和uninstall
的時候可以執行指令碼 -- 《也許你不知道的npm-scropts》- 刪除依賴不要在
package.json
中直接刪除,而是用npm uninstall
來刪除 - 官方文件要多看,會發現很多驚喜
- 遇到問題要多嘗試,文件加原始碼,幹就完了