首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mercurial和Git中JSLint的预提交钩子

Mercurial和Git中JSLint的预提交钩子
EN

Stack Overflow用户
提问于 2009-12-03 12:41:52
回答 3查看 4.8K关注 0票数 17

我想在提交到Mercurial或Git代码库之前运行JSLint。

我希望这是一个自动设置的步骤,而不是依赖于开发人员(主要是我)记住事先运行JSLint。我通常在开发时运行JSLint,但是我想在JS文件上指定一个契约,这些JS文件在提交到代码库之前传递给JSLint。

对于Mercurial,this page详细说明了预提交语法,但唯一可用的变量似乎是提交中涉及的parent1和parent2变更集in。我真正想要的是提交所涉及的文件名列表,这样我就可以选择.js文件并对它们运行jslint。

Similar issue for GIT,作为预提交脚本的一部分可用的默认信息似乎有限。

可能的工作是调用hg status/git status作为预提交脚本的一部分,解析输出以找到JS文件,然后以这种方式完成工作。不过,我希望更简单一些,而且我不确定调用状态作为预提交钩子的一部分是否反映了正确的信息。例如,在Git中,如果更改文件尚未添加,但git提交使用了-a,那么这些文件是否会显示在git状态输出的正确部分中,作为提交集的一部分?

更新:我得到了一些工作,它在这里可见:http://github.com/jrburke/dvcs_jslint/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-03 18:26:25

对于git,.git/hooks目录中有一些示例。如果只需要JSLint的文件名,可以使用git diff --name-only,在我的示例中,它将列出与当前HEAD不同的文件名。

票数 2
EN

Stack Overflow用户

发布于 2011-09-12 17:45:23

以下是@Bitbieger的Git解决方案的一个变体,它可以与Node.jsnode-jslint的本地副本一起使用(即,您需要在根存储库目录中使用npm install jslint )。

此外,脚本:

  • 在所有.html和.json文件上运行jslint,而.js
  • 只在已添加、复制或修改的文件上运行jslint。这可以防止jslint在已重命名的文件上出错或deleted.
  • Replicates任何jslint错误,以便用户查看
  • 使用--indent 4 --white true jslint选项来确保源代码一致性

要使其正常工作,请将以下内容复制到.git/hooks/pre-commit,并不要忘记使用chmod +x .git/hooks/pre-commit

代码语言:javascript
复制
# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done
票数 12
EN

Stack Overflow用户

发布于 2009-12-06 19:15:21

JSLint with SpiderMonkey

代码语言:javascript
复制
for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1837681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档