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é!