在做前端工程化時husky可以說是一個必不可少的工具。husky可以讓我們向項目中方便添加git hooks。通常情況下我只需要如下兩步就可在項目中引入并設置好husky:
1.將husky添加到項目的開發依賴中
npm install -D husky
2. 在package.json中設置我們需要的git hooks
{ "husky": { "hooks": { "pre-commit": "npm run test", // 在commit之前先執行npm run test命令 "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" // 校驗commit時添加的備注信息是否符合我們要求的規范 } }}
在之前的項目中我們通常都是這樣完成對husky的引入和設置的。但是今天在我新建的項目中這樣設置竟然不起作用了,經過一番查看才知道原來最新版本的husky(6.0.0)已經做了破壞性的變更,之前的設置方式已經失效了。
根據官方的說法,之前husky的工作方式是這樣的,為了能夠讓用戶設置任何類型的git hooks都能正常工作,husky不得不創建所有類型的git hooks。這樣在git 工作的每個階段都會調用husky所設置的腳本,在這個腳本中husky會檢查用戶是否配置該hook,如果有就運行用戶配置的命令,如果沒有就繼續往下執行。
這樣做的好處就是無論用戶設置什么類型的git hook husky都能確保其正常運行。但是缺點也是顯而易見的,即使用戶沒有設置任何git hook,husky也向git中添加了所有類型的git hook。
那有沒有可能讓husky只添加我們需要的git hook呢?作者嘗試過解決這個問題,但是失敗了。究其失敗的根本原因,就是因為husky需要在兩個地方進行配置才能完成一個完整的git hook功能。一個是在package.json中配置git hook所要執行的真正命令,一個是在.git/hooks/中配置相對應的git hook。也就是說無論是添加還是刪除git hook就要保證在這兩個地方同步執行對應的操作。作者無法找到一個可靠的方法來同步這兩個地方的配置,因此失敗了。
作者認為這個問題是由husky工作模型的自身缺陷導致的,如果想要解決就不得不另辟蹊徑采用一種新的工作模型。因此新版husky做了破壞性的變更。
新版的husky使用了從git 2.9開始引入的一個新功能core.hooksPath。core.hooksPath可以讓你指定git hooks所在的目錄而不是使用默認的.git/hooks/。這樣husky可以使用husky install
將git hooks的目錄指定為.husky/,然后使用husky add
命令向.husky/中添加hook。通過這種方式我們就可以只添加我們需要的git hook,而且所有的腳本都保存在了一個地方(.husky/目錄下)因此也就不存在同步文件的問題了。
npm install -D husky
{ "scripts": { "prepare": "husky install" }}
prepare腳本會在npm install
(不帶參數)之后自動執行。也就是說當我們執行npm install安裝完項目依賴后會執行 husky install
命令,該命令會創建.husky/目錄并指定該目錄為git hooks所在的目錄。
npx husky add .husky/pre-commit "npm run test"
運行完該命令后我們會看到.husky/目錄下新增了一個名為pre-commit的shell腳本。也就是說在在執行git commit命令時會先執行pre-commit這個腳本。pre-commit腳本內容如下:
#!/bin/sh. "$(dirname "$0")/_/husky.sh" npm run test
可以看到該腳本的功能就是執行npm run test這個命令
在項目中我們會使用commit-msg這個git hook來校驗我們commit時添加的備注信息是否符合規范。在以前的我們通常是這樣配置:
{ "husky": { "hooks": { "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" // 校驗commit時添加的備注信息是否符合我們要求的規范 } }}
在新版husky中$HUSKY_GIT_PARAMS這個變量不再使用了,取而代之的是$1。在新版husky中我們的commit-msg腳本內容如下:
#!/bin/sh. "$(dirname "$0")/_/husky.sh"#--no-install 參數表示強制npx使用項目中node_modules目錄中的commitlint包npx --no-install commitlint --edit $1
這個腳本應該也能使用類似于npx husk add .husky/commit-msg "npx --no-install commitlint --edit $1"
這樣的命令進行添加,但是由于本人對shell編程不熟,不知道如何將$1當成一個普通的字符串輸出的文件中去,所以一直沒有成功。希望有知道的大神能夠告訴我一下。
感謝
@chuan
大佬的幫助,對于commit-msg hook我們可以使用以下命令來創建git hook所要執行的腳本
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
聯通G網CDMA具體指什么?CDMA屬于中國電信,是2G網絡的網絡模式。1中國聯通使用4G:fdd lte/tdd-lte 3G:WCDMA;2G:GSM。電信網絡:4G:fdd lte/tdd-lte3g:CDMA2000;2G:CDMA。2不同的網絡導致運營商手機卡所需的手機不同。應根據使用位置判斷網絡覆蓋范圍。至于關稅方案,它們有自己的特點。三。主要區別在于他們是兩個不同的電信運營商,擁有不...
whist翻頁筆的使用說明?PPT翻頁激光筆有接收器,插在電腦的USB接口上。一般會有說明,根據安裝直接使用即可。ppt翻頁筆怎么對碼?按住激光筆的翻頁鍵,打開激光筆的開關,將接收器插入電腦的usb接口,指示燈閃爍。松開向下翻頁按鈕,指示燈停止閃爍。如果配對成功,激光筆可以正常使用。ppt用激光筆不能切換怎么處理?激光翻頁筆一般用來直接打開PPT課件演示,功能其實和鼠標點擊差不多。如果在白板軟件中...
素顏歌詞完整版許嵩的《素顏》歌詞是什么?許嵩的《素顏》歌詞是什么?歌名:素顏演唱:許嵩、何曼婷作詞:許嵩作曲:許嵩許嵩:又是一個安靜的晚上一個人窩在搖椅里乘涼我承認這樣真的很安詳和樓下老爺爺一樣Yeah何曼婷:聽說你還在搞什么原創搞來搞去好像也就這樣不如花點時間想想琢磨一下模樣今夜化了美美的妝(許嵩:我相信是很美美的妝)我搖晃在舞池中央(許嵩:那種體態可以想象)何曼婷:我做我的改變 又何必糾結許嵩...