做為開發人員,每個人寫代碼都會出現BUG,但要防止低級的BUG出現就要對代碼進行質量檢查,所以當代碼進行提交時對代碼進行檢查非常有必要,而且能統一代碼的規范性。
而我們開發時,進行代碼提交用得多就是SVN與Git倉庫來管理,而現在我是用git來進行代碼管理的,所以現介紹一下用git如何進行代碼檢查;
安裝Git(網上很多,不講多),安裝jsHint來進行檢查,這里我是用nodeJS來進行安裝。
安裝命令:npm i jshint -g,
然后打開git的pre-commit鉤子,位置在yourProject/.git/hooks
在pre-commit添加shell腳本:
#!/bin/sh
#
# Run JSHint validation before commit.
files=$(git diff HEAD --name-only --diff-filter=ACMR -- static/mobile/**.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
OK,完成,現在執行git commit就能檢查要提交的js代碼是否通過。
作為一個前端人員(我就是),可能對shell腳本編寫不太熟,能否不通過編寫shell實現呢?
那就用npm上的插件pre-commit來實現,
安裝命令:npm i pre-commit --save
然后新建一個package.json,添加pre-commit參數:
數組中的字符串就是要執行的scripts命令:
ok,添加完批,執行git commit,被坑了.....
由于windows是不支持*.js的寫法,直接就報錯Can't open file *.js,代碼又提交成功,這不是我們想要的效果;
如果要檢查就只能用(.)或者指定目錄(static/mobile),就會檢查所有的文件或者指定目錄的js文件,但問題又來了,這樣檢查就全局檢查了,我們的目的只檢查提交的更改代碼;廢話不說,來寫插件吧。
先安裝jshint在工程,可以給插件調用;
安裝命令:npm i jshint --save;
命名為check.js:
check.js代碼:
'use strict';
var exec = require('child_process').exec,
jsHint = require('jshint').JSHINT,
fs = require('fs');
var content = fs.readFileSync('./.jshintrc','utf-8'),
content = JSON.parse(content);
var pass = 0;
exec('git diff HEAD --name-only --diff-filter=ACMR -- static/mobile/**.js',(error, stdout, stderr) => {
if(stdout.length){
var array = stdout.split('\n');
array.pop();
array.forEach((path) => {
jsHint(fs.readFileSync(path,'utf-8'),content,content.globals);
jsHint.errors.forEach((o) => {
console.log(path + ': line ' +o.line + ', col ' + o.character + ', ' + o.reason);
pass = 1;
});
});
process.exit(pass);
}
if (error !== null) {
console.log('exec error: ' + error);
}
});
OK,當執行git commit就可以執行check.js的代碼,先獲取差異文件,再把錯誤信息輸出,如果有錯直接結束進程;
對于不懂shell腳本的前端同學,就很好的擴展這個check.js文件,也可以過濾個別的js文件。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。