使用Git Hook, Gulp及JSHint來保證JavaScript代碼質量
來自: http://segmentfault.com/a/1190000004400946
隨著Web項目中用到的JavaScript越來越多,以及項目中參與人數的增加,保證JavaScript的代碼質量尤為顯得重要。一方面可以形成統一的代碼風格,方便團隊之間協作,另一方面也可以提高代碼的可讀性,方便以后的維護。
今天主要來介紹一下如何結合 Git Hook , Gulp 及 JSHint 來檢測JavaScript代碼,從而保證JavaScript的代碼質量。
需要的環境及工具
配置JSHint
JSHint是一個用來檢測JavaScript代碼質量的工具,類似的還有ESLint, JSCS等。
首先需要全局安裝JSHint:
npm install -g jshint
然后在項目根目錄中添加 .jshintrc 文件,添加你的配置項,如「駝峰命名」、「單引號」、「嚴格模式」等:
{ "node": true, "esnext": true, "bitwise": true, "camelcase": true, "curly": true, "eqeqeq": true, "immed": true, "indent": 2, "latedef": true, "newcap": true, "noarg": true, "quotmark": "single", "undef": true, "unused": true, "strict": true }
具體配置可以根據團隊需要自行調整,更多配置項可以 參考官網 。
為了能夠實時檢測代碼中的語法,可以給代碼編輯器安裝JSHint的插件,例如Sublime Text,可以安裝 SublimeLinter 及 SublimeLinter-jshint 這兩個插件。
配置Gulp Task
Gulp是一個自動化構建工具,可以自動執行一些常見的任務,如SASS編譯、文件壓縮、代碼合并等,極大的提高了我們的工作效率,類似的工具還有 Grunt 。
首先需要全局安裝Gulp:
npm install -g gulp
然后在項目中創建 gulpfile.js 文件,添加task。接下來我們給JavaScript的檢測添加一個task,并安裝相關依賴。
所用到的NPM包:
{ // ... "devDependencies": { "gulp": "^3.9.0", "gulp-jshint": "^2.0.0", "gulp-load-plugins": "^1.2.0", "jshint": "^2.9.1", "jshint-stylish": "^2.1.0", // ... } // ... }
'use strict';var gulp = require('gulp'); var $ = require('gulp-load-plugins')();
gulp.task('lint:js', function () { return gulp.src([ './static/js/*/.js', ]).pipe($.jshint()) .pipe($.jshint.reporter('jshint-stylish')) .pipe($.jshint.reporter('fail')); });</pre>
此時Gulp任務已經配置好了,可以先測試一下:
gulp lint:js如果有JS文件不符合規范,則會給出提示信息。如果希望忽略某些JS文件,可以添加 .jshintignore 配置文件,寫法跟 .gitignore 類似。
添加Git Hook
Git和其它版本控制工具類似,當某些重要的操作發生時,可以調用自定義的腳本,這些腳本可以稱作是Hooks(鉤子)。這里的JS代碼檢測可以用提交工作流鉤子來處理。
在項目的根目錄里會有 .git 文件夾,然后找到放置hooks的位置:
.git/hooks ├── applypatch-msg.sample ├── commit-msg.sample ├── post-update.sample ├── pre-applypatch.sample ├── pre-commit.sample ├── pre-push.sample ├── pre-rebase.sample ├── prepare-commit-msg.sample └── update.sample這里放置了一些示例文件,其中我們用到的是 pre-commit.sample ,我們把后綴 .sample 去掉即可生效。然后添加腳本,使進行commit操作時,調用Gulp任務。
#!/bin/shif git diff --cached --name-only --diff-filter=ACM | grep '.js' then gulp lint:js fi
exit $?</pre>
OK,一切都配置好了!此時,每當對JS文件進行commit操作時就會通過Git Hook調用Gulp任務,若JSHint檢測通過,則commit操作成功,否則commit操作失敗。
</div>