npm script 的 pre、post 钩子及在 pre commit 时进行 lint
pre、post 钩子
介绍
npm run
为每条命令提供了pre-
和post-
两个钩子(hook)。- 以
npm run lint
为例,执行这条命令之前,npm
会先查看有没有定义prelint
和postlint
两个钩子,如果有的话,就会先执行npm run prelint
,然后执行npm run lint
,最后执行npm run postlint
- 可以在这两个钩子中来完成一些其它事情,如在执行
test
前先执行lint
操作
示例
1 | "scripts": { |
- 执行
npm run test
时会先执行npm run pretest
再执行npm run test
最后执行npm run posttest
- 中间任意一环节报错,就会中断后续执行
- 不能在
pre脚本
之前再加pre
,即prepretest脚本
不起作用。 - 即使
npm
可以自动运行pre
和post
脚本,也可以手动执行它们
缺陷
pre、post
钩子只能在npm run
时生效,没法在其他场景使用;- 如需要在
git commit
时先lint
代码
改进
- 使用
husky
husky
介绍
husky
可以在git commit
和git push
时执行自定义脚本- 可以利用这个特性在
commit
时做lint
工作
示例
1 | "scripts": { |
注意
- 老版本
husky
的钩子是直接定义在scripts
中的,最新版本将其转移到husky
字段下了 - 老版本
husky
的钩子名称一般为precommit、prepush
,现在统一改成了pre-commit、pre-push
缺点
- 每次针对所有文件进行
lint
,我们希望仅针对修改的或者说是staged
的文件进行lint
-husky
配合lint-staged
使用
lint-staged
介绍
husky
可以让我们在git commit
和git push
时执行一段脚本lint-staged
则可以针对add
进git 暂存区
的文件进行lint
操作
使用
- 首先安装
npm i -D lint-staged husky
- 定义
lint-staged
相关脚本- 可针对不同类型文件执行不同脚本,参考示例
示例
1 | "scripts": { |