做为开发人员,每个人写代码都会出现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文件。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。