Zabraňte špatným závazkům s husky

Přispíval jsem k úžasnému projektu A-Frame, což je knihovna, která vám umožňuje vytvářet zážitky ve VR pomocí webových technologií, a bylo to skvělé. Kód JavaScript je velmi stručný a jednotný, takže přispívání je radost a přitom jsou standardy kódu přísné. Proč je to tak stručné? Projekt A-Frame využívá kombinaci JSHint, kterou všichni známe, ale další balíček, který jsem neznal: husky. Husky sestaví precommit a další git hooky pro spouštění příkazů v package.json předtím, než je povoleno potvrzení.

package.json

Přidáte husky na devDependencies objekt v package.json získat přístup k nástroji během npm install . V rámci vašeho scripts objektu, vytvoříte klíč precommit například ke spuštění JSHint nebo jiných rutin, které si přejete. Zde je zmenšená ukázka:

{
  /* ... */
  "scripts": {
    "lint": "semistandard -v | snazzy",
    "precommit": "npm run lint"
  },
  /* ... */
  "devDependencies": {
    /* ... */
    "husky": "^0.10.1",
    "semistandard": "^7.0.2",
    "snazzy": "^3.0.0"
  }
  /* ... */
}

Háček

Vygeneruje se háček, který vypadá následovně (.git/hooks/pre-commit jako příklad):

#!/bin/sh
# husky
PATH="/usr/local/lib/node_modules/npm/bin/node-gyp-bin:/Users/YOURUSER/Projects/aframe/node_modules/husky/node_modules/.bin:/Users/YOURUSER/Projects/aframe/node_modules/.bin:/usr/local/bin:/Users/YOURUSER/.rvm/gems/ruby-2.1.1/bin:/Users/YOURUSER/.rvm/gems/ruby-2.1.1@global/bin:/Users/YOURUSER/.rvm/rubies/ruby-2.1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/YOURUSER/.rvm/bin"
cd .
[ -f package.json ] && cat package.json | grep -q '"precommit"\s*:'
[ $? -ne 0 ] && exit 0
npm run precommit
if [ $? -ne 0 ]; then
  echo
  echo "husky - pre-commit hook failed (add --no-verify to bypass)"
  echo
  exit 1
fi

Hák zkontroluje package.json soubor a poté zkontroluje, zda tam není scripts klíč pro soubor háku, ve kterém se nachází; pokud ano, scripts příkaz key se provede a pouze pokud vrátí 0 umožňuje dokončení odevzdání; pokud se vyskytnou nějaké chyby lint, například se potvrzení neprovede a budete muset opravit hnidy prezentované JSHint.

Použití husky pro JSHint je jen příklad použití; můžete použít husky ke spuštění libovolného příkazu, jako je kontrola pravopisu nebo kontroly zranitelnosti zabezpečení, abyste zajistili, že odevzdání splňuje vaše standardy. Přál bych si, abych o husky věděl už dávno – díky němu je nastavení háčků strukturované a snadné!