设置预先提交钩子jshint

我最近在github上开始了一个项目 。 每次使用Travis后,我都设法设置了自动testing。 但是现在我想用jshint设置一个预先提交的钩子。 所以如果jshint报告错误,提交应该失败。 但是,这是可能的,如果是的话,如何做到这一点?

但这是可能的…

是! 这个有可能。 我最近写了关于它 。 请注意,它不是特定于GitHub,通常只是Git – 因为它是一个预提交钩子,它任何数据发送到GitHub 之前运行。

存储库中的/.git/hooks目录中的任何适当命名的可执行文件将作为挂接运行。 默认情况下,可能会有一堆示例钩子。 下面是一个简单的shell脚本 ,我用它作为一个JSLint预提交钩子(你可以很容易地修改它来使用JSHint):

#!/bin/sh files=$(git diff --cached --name-only --diff-filter=ACM | grep "\.js$") if [ "$files" = "" ]; then exit 0 fi pass=true echo "\nValidating JavaScript:\n" for file in ${files}; do result=$(jslint ${file} | grep "${file} is OK") if [ "$result" != "" ]; then echo "\t\033[32mJSLint Passed: ${file}\033[0m" else echo "\t\033[31mJSLint Failed: ${file}\033[0m" pass=false fi done echo "\nJavaScript validation complete\n" if ! $pass; then echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n" exit 1 else echo "\033[42mCOMMIT SUCCEEDED\033[0m\n" fi 

你可以简单地把它放在一个名为pre-commit的可执行文件中,并在每次提交之前运行。

在你的Node.js工作stream中做一个更简单的预先提交检查(例如JSHint):

从NPM安装jshint :

npm install jshint

接下来在你的项目中创build一个.jshintrc文件,如果你还没有的话。 例如: https : //github.com/nelsonic/learn-jshint/blob/master/.jshintrc

现在安装预先提交模块(并将其保存为开发依赖):

npm install pre-commit --save-dev

接下来,您将需要定义将在package.json中为JSHint运行的任务(脚本)

例如:

{ "scripts": { "jshint": "jshint -c .jshintrc --exclude-path .gitignore ." } }

那么你注册你想运行的脚本pre-commit(也在package.json中)例如:

"pre-commit": [ "jshint", "coverage", "etc" ]

这使您可以在预先提交工作stream程中进行多个检查。 (我们有检查,以确保团队成员代码符合JSHint,代码风格和testing覆盖率是100%)

有关更详细的教程,您可以与您的团队分享: https//github.com/nelsonic/learn-pre-commit

对@James Allardice脚本进行一些更改以适应JSHint。 感谢您的原始代码。

 #!/bin/sh # # Run JSHint validation before commit. files=$(git diff --cached --name-only --diff-filter=ACMR -- *.js **/*.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 

类似的@igor的脚本有一些改进:

  • 颜色指标
  • no –diff-filter,grep使用insead
  • 帮助消息(git样式)以避免预先提交调用

 #!/bin/sh # # Run JSHint validation before commit. RED='\033[0;31m' REDBOLD='\033[1;31m' ORANGE='\033[0;33m' NC='\033[0m' # No Color files=$(git diff --cached --name-only | grep .js) pass=true totalErrors=0 if [ "$files" != "" ]; then for file in ${files}; do result=$(jshint ${file}) if [ "$result" != "" ]; then echo "${RED}$result${NC}" pass=false totalErrors=$((totalErrors+1)) fi echo "" done fi if $pass; then exit 0 else echo "${ORANGE}===== ${totalErrors} JSHint Error${NC}" echo "" echo "${REDBOLD}COMMIT FAILED: Some JavaScript files are invalid. Please fix errors and try committing again.${NC}" echo "" echo " (use -n option \"git commit -n -m <message>\" to avoid call pre-commit hook and JSHint check)" echo "" exit 1 fi