Konfigūruokite jshint kablys prefiksą

Neseniai pradėjau projektą „github“ . Po kiekvieno „Travis“ įrašymo man pavyko nustatyti automatinį bandymą. Bet dabar aš norėčiau sukurti iš anksto įsipareigojantį kablys su jshint. Todėl, jei „jshint“ praneša apie klaidas, įsipareigojimas turėtų nepavykti. Bet ar tai įmanoma, ir jei taip, kaip tai padaryti?

34
29 марта '13 в 15:16 2013-03-29 15:16 Jeanluca Scaljeri nustatė kovo 13 d. 13 val. 15:16 2013-03-29 15:16
@ 4 atsakymai

Bet ar įmanoma ...

Taip Tai įmanoma. Neseniai apie tai rašiau . Atkreipkite dėmesį, kad jis nėra specifinis „GitHub“, paprastai „Git“, nes jis yra iš anksto užsisakęs kablys, jis veikia prieš siunčiant duomenis į „GitHub“.

Visi atitinkami vykdomieji failai, esantys jūsų saugyklos /.git/hooks kataloge, bus vykdomi kaip perėmėjai. Tikriausiai pagal nutylėjimą bus krūva pertraukų pavyzdžių. Štai paprastas scenarijų apvalkalas , kurį naudoju kaip „JSLint“ iš anksto įvykdantį perėmimą (galite lengvai jį pakeisti, kad dirbtumėte su „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 

Jūs galite paprasčiausiai įdėti jį į vykdomąjį failą, pavadintą „išankstinis įsipareigojimas“ „Git“ kablių kataloge, ir jis bus paleistas prieš kiekvieną įvykį.

38
02 апр. James Allardice atsakymas 02 Bal. 2013-04-02 09:56 '13, 9:56, 2013-04-02 09:56

Į Node.js < prieš atlikdami patikrinimus (pvz., JSHint)

Įdiekite „ jshint“ iš „NPM“:

npm install jshint

Tada savo projekte sukurkite .jshintrc failą, jei to dar neturite. pavyzdžiui: https://github.com/nelsonic/learn-jshint/blob/master/.jshintrc

Dabar įdiekite išankstinio modulio modulį (ir išsaugokite jį kaip priklausomybę nuo kūrėjo):

npm install pre-commit --save-dev

Tada jums reikės apibrėžti užduotį (scenarijų), kuris bus paleistas JSHint pakete.json

pavyzdžiui:

{ "scripts": { "jshint": "jshint -c .jshintrc --exclude-path .gitignore ." } }

tada užregistruokite scenarijus, kuriuos norite paleisti iš anksto (taip pat pakete.json), pavyzdžiui:

"pre-commit": [ "jshint", "coverage", "etc" ]

Tai leidžia jums atlikti daugiau nei vieną patikrinimą iš anksto įvykusioje darbo eigoje. (Mes patikriname, ar komandos narių kodas atitinka JSHint, kodo stilių ir testo aprėptį - 100%)

Jei norite gauti išsamesnį vadovą, galite bendrinti su savo komanda: https://github.com/nelsonic/learn-pre-commit

36
25 окт. Atsakymą pateikė nelsonic spalio 25 d. 2014-10-25 01:31 '14 at 1:31 2014-10-25 01:31

Kai kurie @James Allardice scenarijaus pakeitimai, skirti JSHint . Dėkojame už šaltinio kodą.

 #!/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 
15
20 янв. Atsakymas duotas igor sausio 20 d 2014-01-20 19:17 '14, 19:17, 2014-01-20 19:17

Panašus „@igor“ scenarijus su kai kuriais patobulinimais:

  • spalvų indikatoriai
  • ne -diff-filter grep naudojamas insead
  • pagalbos žinutė („git“ stilius), kad būtų išvengta išankstinio įsipareigojimo

 #!/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 
2
02 сент. Atsakymą pateikė EnriMR 02 Sep. 2016-09-02 11:59 '16 at 11:59 2016-09-02 11:59

Kiti klausimai apie „ arba „ Klauskite“