在 pre-commit 的钩子中运行 npm script

366 阅读2分钟

译者:rccoder

原文链接

如果你的团队和我工作的团队一样,每个人都有自己喜欢的 IDE(比如: Sublime Text, Atom, WebStorm, Vim, Visual Studio Code 等), 虽然他们大多都集成了校验功能,但是还是不能保证在 Pull Request 之前解决所有的校验问题。

因此,我们已经开始使用 node 模块的 pre-commit 去解决这个问题 —— 更加方便简单的在 git 仓库 commit 之前去执行校验。

安装

npm install pre-commit --save-dev

package.json

如果你已经安装了 pre-commit, 那你就需要在你的 package.json 里面添加一个新的 pre-commit 的入口, 来表示在 commit 之前要执行的校验规则。

{
  ""scripts"": {
    ""lint"": ""eslint ./ --cache --ignore-pattern .gitignore""
  },
  ""pre-commit"": [ ""lint"" ],
  ""devDependencies"": {
    ""eslint"": ""^2.12.0"",
    ""pre-commit"": ""^1.1.3""
  }
} 

别担心,即使你的 pre-commit 钩子没有执行成功, 你还是可以在 commit 的后面加上 --no-verify 的参数来强制提交。

Pre-commit 信息

我发现, 最好是 pre-commit 的脚本前面加上一个发生了什么事情的描述,这样就不会造成信息的混乱了。不然的话,你可能会认为是自己错用了 git 或者发生了其他什么不可描述的事情。

{
  ""scripts"": {
    ""lint"": ""eslint ./ --cache --ignore-pattern .gitignore"",
    ""precommit-msg"": ""echo 'Pre-commit checks...' && exit 0""
  },
  ""pre-commit"": [ ""precommit-msg"", ""lint"" ],
  ""devDependencies"": {
    ""eslint"": ""^2.12.0"",
    ""pre-commit"": ""^1.1.3""
  }
} 

其他建议

你可以在 pre-commit 里面添加其他的脚本,比如单元测试(ava, mocha, jasmine......) 或者覆盖度测试(nyc, istanbul......)。 当然,在 pre-commit 的钩子里面添加的脚本越多,你的代码等待 commit 的时间也就越长。

结论

添加 pre-commit 可以帮助你的项目增强一致性和代码质量。 除了代码校验和单元测试之外,你有没有发现更多的使用实例呢? 如果有的话,我很想听听你的声音。 你可以在 twitter at [@elijahmanor] 上找到我。