安装
npm install pre-commit –save-dev
package.json
如果你已经安装了 pre-commit, 那你就需要在你的 package.json 里面添加一个新的 pre-commit 的入口, 来表示在 commit 之前要执行的校验规则。
1 2 3 4 5 6 7 8 9 10
| { "scripts": { "lint": "eslint ./ --cache --ignore-pattern .gitignore" }, "pre-commit": [ "lint" ], "devDependencies": { "eslint": "^2.12.0", "pre-commit": "^1.1.3" } }
|
Pre-commit 信息
可以在 pre-commit 前加一个描述日志,,这个不会造成信息混乱,清楚的知道发生了什么事。
1 2 3 4 5 6 7 8 9 10 11
| { "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 钩子没有执行成功, 还是可以在 commit 的后面加上 --no-verify 的参数来强制提交。
window由于权限问题,无法在hooks下生成文件,需要以管理打开cmd,执行 node ./node_modules/pre-commit/install.js 手动生成钩子文件。
也可以添加postinstall钩子在项目安装后检查hooks下文件有没有生成,若没有则进执行生成命令:
package.json
1 2 3 4 5
| { "scripts": { "postinstall": "node ./postinstall.js" } }
|
postinstall.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const fs = require('fs'); const path = require('path'); const { exec } = require('child_process'); fs.access(path.join(__dirname, './.git/hooks/pre-commit'), fs.constants.F_OK, (err) => { if (err) { exec('node ./node_modules/pre-commit/install.js', { cwd: dirname }, (err, stdout, stderr) => { if (err) { console.error(`install pre-commit error: ${err}`); return; } if (stdout) { console.log(`install pre-commit stdout: ${stdout}`); } if (stderr) { console.log(`install pre-commit stderr: ${stderr}`); } }); } });
|