我最近開始了project on github。 我設法使用Travis每次提交後都設置自動測試。但是現在我想用jshint設置一個預先提交的鉤子。所以如果jshint報告錯誤,提交應該失敗。但是這是可能的,如果是這樣,怎麼做?設置預掛鉤jshint
回答
但是,這是可能的...
是的!這個有可能。我recently wrote about it。請注意,它不是特定於GitHub,通常只是Git - 因爲它是預先提交的鉤子,它在之前運行任何數據發送到GitHub。
存儲庫中/.git/hooks目錄中的任何適當命名的可執行文件將作爲掛鉤運行。默認情況下,可能會有一堆示例掛鉤。 Here's a simple shell script我作爲一個JSLint的pre-commit鉤子使用(你可以修改它很容易與JSHint工作代替):
#!/bin/sh
files=$(git diff --cached --name-only --diff-filter=ACM | grep "\.js$")
if [ "$files" = "" ]; then
exit 0
fi
pass=true
echo "\nValidating JavaScript:\n"
for file in ${files}; do
result=$(jslint ${file} | grep "${file} is OK")
if [ "$result" != "" ]; then
echo "\t\033[32mJSLint Passed: ${file}\033[0m"
else
echo "\t\033[31mJSLint Failed: ${file}\033[0m"
pass=false
fi
done
echo "\nJavaScript validation complete\n"
if ! $pass; then
echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n"
exit 1
else
echo "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
你可以簡單地說,在名爲使用Git 預提交一個可執行文件掛鉤目錄,它會在每次提交之前運行。
一些變化@詹姆斯阿勒代斯腳本來滿足JSHint。感謝您的原始代碼。
#!/bin/sh
#
# Run JSHint validation before commit.
files=$(git diff --cached --name-only --diff-filter=ACMR -- *.js **/*.js)
pass=true
if [ "$files" != "" ]; then
for file in ${files}; do
result=$(jshint ${file})
if [ "$result" != "" ]; then
echo "$result"
echo "\n"
pass=false
fi
done
fi
if $pass; then
exit 0
else
echo ""
echo "COMMIT FAILED:"
echo "Some JavaScript files are invalid. Please fix errors and try committing again."
exit 1
fi
有做預提交您的Node.js的工作流程檢查(如JSHint)的更簡單的方法:
從NPM安裝jshint:
npm install jshint
接下來在您的項目中創建一個.jshintrc文件,如果您還沒有。 如:https://github.com/nelsonic/learn-jshint/blob/master/.jshintrc
現在安裝pre-commit模塊(並將其保存爲一個開發依賴):
npm install pre-commit --save-dev
接下來您需要定義將用於JSHint在運行的任務(腳本)的的package.json
如:
{ "scripts": { "jshint": "jshint -c .jshintrc --exclude-path .gitignore ." } }
那麼你註冊,你就需要運行腳本預提交(也的package.json),例如:
"pre-commit": [ "jshint", "coverage", "etc" ]
這可以讓你擁有的不僅僅是一張支票更在預提交流程。 (我們有檢查,以確保團隊成員的代碼與JSHint,代碼樣式符合性和測試覆蓋率爲100%)
對於您可以與您的團隊分享更詳細的教程,請參閱:https://github.com/nelsonic/learn-pre-commit
嗨。你知道如何設置文件夾我wana掃描嗎? – AlexeiBerkov
@AlexeiBerkov你問你是哪個文件夾想要'jshint'進行掃描?參見:http://jshint.com/docs/cli/ – nelsonic
@nelsonic預提交鉤子只能與jshint的一組規則一起使用嗎?我可以使用另一個linter嗎? – RicardoGonzales
類似的腳本來@伊戈爾的一個與一些改進:
- 顏色指標
- 沒有--diff過濾器,grep的使用INSEAD
- 幫助消息(GIT風格),以避免預先提交調用
#!/bin/sh
#
# Run JSHint validation before commit.
RED='\033[0;31m'
REDBOLD='\033[1;31m'
ORANGE='\033[0;33m'
NC='\033[0m' # No Color
files=$(git diff --cached --name-only | grep .js)
pass=true
totalErrors=0
if [ "$files" != "" ]; then
for file in ${files}; do
result=$(jshint ${file})
if [ "$result" != "" ]; then
echo "${RED}$result${NC}"
pass=false
totalErrors=$((totalErrors+1))
fi
echo ""
done
fi
if $pass; then
exit 0
else
echo "${ORANGE}===== ${totalErrors} JSHint Error${NC}"
echo ""
echo "${REDBOLD}COMMIT FAILED: Some JavaScript files are invalid. Please fix errors and try committing again.${NC}"
echo ""
echo " (use -n option \"git commit -n -m <message>\" to avoid call pre-commit hook and JSHint check)"
echo ""
exit 1
fi
看起來不錯! :)這只是* nix而已。 – igor
- 1. Mercurial預先掛鉤修改設置
- 2. JSHint在Git推(更新掛鉤)
- 3. TSLint預先掛鉤鉤子
- 4. gdb掛鉤設置中斷
- 5. GIT預接掛鉤
- 6. 預推git掛鉤?
- 7. Mercurial避免擱置預掛鉤
- 8. Git預接收掛鉤檢查配置
- 9. tortoisehg和預置狀態掛鉤
- 10. SVN JSHint鉤?
- 11. SVN Edge預掛鉤錯誤
- 12. CORS選項預檢掛鉤
- 13. Perforce客戶端預掛鉤
- 14. SVN預提交掛鉤
- 15. Woocommerce - 掛鉤設置產品重量save_post
- 16. Theos/Logos掛鉤設置的ivar/property
- 17. 導出JsHint設置
- 18. 掛鉤或不掛鉤 - git
- 19. API無掛鉤掛鉤
- 20. 導軌設計掛鉤on_login
- 21. 設計後創建掛鉤
- 22. 掛鉤流星重置
- 23. 顛覆客戶端預先掛鉤
- 24. github是否允許預接收掛鉤?
- 25. Instagram掛鉤預選媒體問題
- 26. SVN預先掛鉤FTP在Windows上載
- 27. 允許,將值傳遞到預掛鉤
- 28. Git預接收掛鉤啓動PHP CodeSniffer
- 29. SVN預提交掛鉤失敗
- 30. SVN鎖定掛鉤錯誤:預計opaquelocktoken
日Thnx了很多!但是,我一定在做錯事,因爲我無法讓它工作。我已經創建了.git/hooks文件,並使其可執行。現在當我提交一個「錯誤太多」的文件時,它只是提交它。另外,當我手動運行鉤子時,我被困在/ bin/sh中。現在,當我輸入「exit」時,我收到「COMMIT FAILED」消息。有什麼建議麼 ? –
只是另一件事。如果我刪除了/ bin/sh,鉤子就會從命令行運行。但是我仍然可以提交:( –
@JeanlucaScaljeri - 你是否修改過JSHint?在當前狀態下,它尋找的字符串是特定於JSLint的。 –