在package.json中执行precommit hook时如何获取文件路径?

时间:2018-01-07 10:03:29

标签: javascript node.js git npm

现在在package.json我设置了"precommit": "lint node internal/scripts/precommit",我希望在precommit.js中获取所有提交的文件路径,有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

在您的脚本中,您可以使用git命令获取已提交文件的列表。

var cp=require('child_process')
var output=cp.execSync('cmd /c git show --pretty="" --name-only HEAD').toString()
var files=output.split('\n')
console.log(files)

files变量将包含上次提交中所有文件的数组。

答案 1 :(得分:1)

从“Git pre-commit hook : changed/added files”开始,实际的Git命令是:

QUOTE_CREATE_DT "TO_DATE(NVL(:QUOTE_CREATE_DT, '01/01/0001'), 'MM/DD/YYYY')"

您可以看到来自templates/hooks--pre-commit.sample的一种可能用法 它实际上也用在JavaScript Standard Style GitHub仓库中。

最后,请使用spawnSync,如“Catching Fatal Errors with Node.js child_process

  

通过使用流程“git diff --cached --name-only --diff-filter=ACM -z | xargs -0 ... (或在此情况下为spawn)方法来捕获错误而不放弃应用程序砖块的最佳方法:

spawnSync
  

使用此方法,您可以先检查stderr缓冲区;如果有一个字符串,你知道它出错了,如果没有错误文本,那么这个过程就干净了!

将此方法适用于您的钩子案例,并按照上面建议的那样更改其Git命令。