Git Pylint与pre-commit和EsLlint与husky

Git Pylint与pre-commit和EsLlint与husky,git,eslint,pylint,pre-commit.com,git-husky,Git,Eslint,Pylint,Pre Commit.com,Git Husky,我有一个项目,前端是JS,后端是Python。 前端配置了husky预提交钩子。 今天,我已经用预提交库配置了Pylint,但是husky钩子已经被这个动作覆盖了。 是否可以合并预提交库和husky库? 如果不是。。。解决这个问题的最佳方法是什么?预提交有一个“迁移模式”,用于运行其他现有的钩子框架。husky的钩子实现似乎有点太聪明了,无法检测正在运行的钩子——它们基于正在执行的文件名 pre-commit迁移模式的工作方式是,它接受任何现有的钩子脚本(在本例中,是husky编写的钩子脚本到.

我有一个项目,前端是JS,后端是Python。 前端配置了husky预提交钩子。 今天,我已经用预提交库配置了Pylint,但是husky钩子已经被这个动作覆盖了。 是否可以合并预提交库和husky库? 如果不是。。。解决这个问题的最佳方法是什么?

预提交有一个“迁移模式”,用于运行其他现有的钩子框架。husky的钩子实现似乎有点太聪明了,无法检测正在运行的钩子——它们基于正在执行的文件名

pre-commit迁移模式的工作方式是,它接受任何现有的钩子脚本(在本例中,是husky编写的钩子脚本到
.git/hooks/pre-commit
),并添加扩展名
.legacy
。然后在执行过程中运行该脚本

但对husky来说,它看起来像是在运行
pre-commit.legacy
hook(!)

一个小技巧是在
package.json
中定义
pre-commit.legacy
,它似乎可以工作:

package.json
{
“哈士奇”:{
“挂钩”:{
“pre-commit.legacy”:“echo hello world”
}
},
“依赖项”:{
“哈士奇”:“^4.3.0”
}
}
.pre-commit-config.yaml
#参见https://pre-commit.com 更多信息
#看https://pre-commit.com/hooks.html 更多的钩子
回购协议:
-回购:https://github.com/pre-commit/pre-commit-hooks
修订版:v3.2.0
挂钩:
-id:尾随空格
-id:文件结束修复程序
-id:检查yaml
-id:检查添加的大文件
$git commit-m“两者”
husky>pre-commit.legacy(节点v12.18.3)
你好,世界
修剪尾部空白已通过
已通过文件的修复结束
已跳过检查Yaml(无需检查的文件)
检查是否添加了大文件……。已通过
[master 7bd8807]两者都有
1个文件已更改,1个插入(+),1个删除(-)
尽管如此,这似乎很脆弱。pre-commit被设计为支持多种不同的编程语言(尽管它是用python编写的,但它本机支持(包括javascript


第一个替代方法可能是从
local
pre-commit钩子调用husky:

package.json
{
“哈士奇”:{
“挂钩”:{
“预提交”:“echo hello world”
}
},
“依赖项”:{
“哈士奇”:“^4.3.0”
}
}
.pre-commit config.yaml
#参见https://pre-commit.com 更多信息
#看https://pre-commit.com/hooks.html 更多的钩子
回购协议:
-回购:https://github.com/pre-commit/pre-commit-hooks
修订版:v3.2.0
挂钩:
-id:尾随空格
-id:文件结束修复程序
-id:检查yaml
-id:检查添加的大文件
-回购协议:本地
挂钩:
-id:husky运行预提交
姓名:赫斯基
语言:系统
条目:node_modules/.bin/husky运行预提交
传递文件名:false
总是跑:真的
执行 然而,这个解决方案并没有利用pre-commit的js支持,它只是调用已经存在的husky钩子


一个更原生的解决方案是使用预提交直接安装js钩子,例如,如果您使用的是eslint:

回购协议: -回购:https://github.com/pre-commit/mirrors-eslint rev:'v7.9.0'#使用您想要指向的sha/标记 挂钩: -id:eslint
免责声明:我是pre-commit的作者(呵呵,谢谢你提供了非常有用和全面的答案。我试图通过预提交直接安装eslint,但它奇怪地抱怨。。。smth like
规则“react/jsx boolean value”的配置无效
。。。这就是为什么我决定从书架上拿出一盘旧的好鸭子磁带:啊,你可能想
$ pre-commit run --all-files --verbose
Trim Trailing Whitespace.................................................Passed
- hook id: trailing-whitespace
- duration: 0.03s
Fix End of Files.........................................................Passed
- hook id: end-of-file-fixer
- duration: 0.03s
Check Yaml...............................................................Passed
- hook id: check-yaml
- duration: 0.05s
Check for added large files..............................................Passed
- hook id: check-added-large-files
- duration: 0.05s
husky....................................................................Passed
- hook id: husky-run-pre-commit
- duration: 0.07s

husky > pre-commit (node v12.18.3)
hello world

$ pre-commit  run --all-files
[INFO] Initializing environment for https://github.com/pre-commit/mirrors-eslint.
[INFO] Initializing environment for https://github.com/pre-commit/mirrors-eslint:eslint@7.9.0.
[INFO] Installing environment for https://github.com/pre-commit/mirrors-eslint.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
eslint...................................................................Passed