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

in 默认 with 0 comment

原文:https://www.zcfy.cc/article/633

如果你的团队和我工作的团队一样,每个人都有自己喜欢的 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] 上找到我。