如何在预提交钩子中添加linting

时间:2017-06-07 18:27:51

标签: git bash githooks pre-commit-hook pre-commit

大家好,我有一个git repo,里面有3个文件夹(个别js项目)。

这是我的pre-commit挂钩

#!/bin/bash
echo -e "\033[1;92m Linting Staged Files . . . "

files=$(git diff --diff-filter=d --cached --name-only | grep -E '\.(js|jsx)$')
path=(${files[0]//// })


if [[ $files = "" ]] ; then
  echo -e "\033[1;31m You have no staged file, exiting . . "
  exit 1
fi

for file in $files
do
git show ":$file" | $("./$path/node_modules/.bin/eslint --stdin --stdin-filename $file")
 if [ $? -ne 0 ]; then
   echo -e "\033[1;31m ESLint failed on staged file '$file'. \n Code will not be committed, Please fix your code and try again."
exit 1
 fi
done

BRANCH=`git rev-parse --abbrev-ref HEAD`

if [[ "$BRANCH" == "master" || "$BRANCH" == "develop" ]]; then
 echo "\033[1;31m commiting to $BRANCH is illegal."
 echo "\033[1;31m If you really know what you're doing, then add the argument '-n' to skip this git hook."
 exit 1
fi

exit 0

但它仍然在此行git show ":$file" | $("./$path/node_modules/.bin/eslint --stdin --stdin-filename $file")

失败

有错误

.git/hooks/pre-commit: line 17: ./node_modules/.bin/eslint --stdin --stdin-filename sfa/src/SFAApp.js: No such file or directory

我不知道我做错了什么,请帮忙。

3 个答案:

答案 0 :(得分:0)

从不介意我通过更改

来解决问题

./$path/node_modules/.bin/eslint --stdin --stdin-filename $file

$()

TODO:研究document.getElementById("test").onclick = function(){ window.location='http://www.google.com/'; } 在bash中的真正含义。

答案 1 :(得分:0)

您正在尝试运行名为:

的命令
./node_modules/.bin/eslint --stdin --stdin-filename sfa/src/SFAApp.js

而不是尝试运行名为:

的命令
./node_modules/.bin/eslint

带参数:

--stdin

--stdin-filename

sfa/src/SFAApp.js

治愈方法是修复双重报价。一旦你这样做,你可能会遇到第二个问题:

git show ":$file" | $(./$path/node_modules/.bin/eslint --stdin --stdin-filename "$file")

将使用参数运行命令,但是,因为它在$(...)内,将其输出作为命令。我对eslint一无所知,但看起来这应该是:

git show ":$file" | ./$path/node_modules/.bin/eslint --stdin --stdin-filename "$file"

(我也完全不确定$path的愚蠢是什么。行path=(${files[0]//// })path设置为列出的文件的第一个文件路径名组件git diff,例如,如果输出为a/b/c.js,则path设置为a。)

答案 2 :(得分:0)

您可以使用npm软件包 husky https://www.npmjs.com/package/husky

通过点击git钩进行预提交,您可以将所有暂存的文件按下面的行抹掉已删除的文件

git diff --cached-仅名称--diff-filter = d | grep“ .js $” | xargs ./node_modules/.bin/eslint

您的.huskyrc非常类似于以下内容:

module.exports = {
 'hooks': {
   'pre-commit': 'git diff --cached --name-only --diff-filter=d | grep ".js$" | xargs ./node_modules/.bin/eslint'
  }
}