谁再次推动失败测试?与沙哑的git钩
#node #测试 #codenewbie #git

您要做的三件事不是在您的存储库中想要:

  1. 未格式化的代码
  2. 警告/错误
  3. 失败测试

是否有一种简单的方法可以防止这些发生?当然,只需确保在推出代码之前先格式化代码,运行衬里并启动测试套件即可。而且,请告诉您的团队做同样的事情。

什么可能出了什么问题?一切:D

如果解决方案要求人们必须记住要做某事,则可以确定它不会起作用。

git钩

使用GIT钩子自动化此过程的可能解决方案。它们基本上是每次在GIT存储库中发生特定事件时自动运行的脚本。例如,您可以在git commit(格式和柔软)之前或git push(tests)之前运行脚本。

如果相关挂钩失败,您也可以使操作失败(在这种情况下为提交或推动)。

这听起来很棒,但是有一个问题:git钩不是存储库的一部分。它们存储在本地存储在.git文件夹中,该文件夹未版本。这意味着每当您或同事克隆一个存储库时,他们都必须再次设置钩子。

看来我们仍在陷入同一陷阱中,人们必须记住手动做某事。不会工作。

沙哑的ð¶

害怕不要!您可以请沙哑帮助您。

Husky

我的意思是,不是狗,而是一个非常酷的节点包,称为Husky

沙哑的工作主要是两件事:

  1. 您可以在存储库中定义git挂钩并将其保留为版本,以便每个人在克隆仓库时都具有代码。
  2. 运行npm install(或yarn)时,它将自动为您设置钩子,这意味着您可以确保每个人都有它们。

那有多酷?实际上,这涵盖了我们之前遇到的两个主要问题!

如何使用它

我录制了一个视频,在其中逐步浏览了在存储库中设置沙哑的过程,并带有两个钩子:

  • pre-commit:在上演文件上运行prettiereslint
  • pre-push:运行测试套件

没有时间观看视频?您可以在YouTube上的“稍后观看”上添加它,从那里有一些值。

无论如何,这是一个快速摘要:

先决条件

在此示例中,我将使用prettiereslint进行格式化和提起代码。我还将使用lint-staged仅在上演文件上运行衬里。如果您还没有它们,请按照以下简单的步骤:

npm install -D prettier lint-staged

对于eslint,您确实可以手动将其作为DEV依赖项并粘贴配置文件,也可以运行此命令并按照说明:

npm init @eslint/config

这将运行一个简单的CLI向导,最终将为您生成.eslintrc文件并安装所需的依赖项。

此外,请确保配置lint-staged以定义在文件上必须执行哪些命令。一个例子:

{
  "./src/**/*.{js,ts}": ["prettier --write", "eslint --max-warnings 0"]
}

此配置运行prettiereslint,并在jsts文件中具有给定参数。

沙哑的设置

您可以关注official docs设置赫斯基,但实际上与运行此命令一样容易:

npx husky-init && npm install


yarn dlx husky-init --yarn2 && yarn

此命令将为您完成所有操作,在部分中会添加您的软件包。

它还将在.husky文件夹中创建一个示例pre-commit挂钩,您可以编辑自己的钩子。

预先签名的钩子

沙哑已经为我们生成了它,但它包含npm test作为一个例子。

在我们的情况下,我们希望用lint-staged替换它。您可以通过CLI进行操作,但是它也很容易,就像在.husky/pre-commit中打开文件并用npx lint-staged替换最后一行。

确保再次运行npm installyarn安装钩子,然后完成了!

前挂钩

这个不是赫斯基生成的,因此我们必须手动创建它。

您可以手动创建一个名为.husky/pre-push的文件或运行此命令:

npx husky add .husky/pre-push "npm test"

这将创建文件并将npm test命令添加到它。再次运行npm installyarn,以便在您的存储库中正确设置钩子。

旁观沙哑

有时制定太严格的规则可能会令人沮丧,尤其是当您急忙而您只想推动代码并回家时。

HUSKY允许您通过在命令中添加--no-verify标志来绕过钩子。例如:

git commit -m "My commit message" --no-verify

这将跳过钩子并允许您提交代码。

但是,现在所有命令支持--no-verify,包括git push

在这种情况下,您可以通过将HUSKY环境变量设置为0
来手动禁用沙哑的沙哑

HUSKY=0 git push

这将使您无需挂钩即可运行命令。如果您在没有HUSKY变量的情况下运行git push,它将像往常一样触发钩子。

现在您知道如何绕过挂钩,请,请,请不要这样做。

结论

如果您不能或不想,请通过管道完成工作,我强烈建议您使用此工具!设置非常简单,并且对每个人都有用。

就是这样!有了沙哑的,您可以确保团队中的每个人总是设定所有必需的git钩子!今天,我们仅展示了pre-commitpre-push,但Husky支持所有可用的Git Hooks。

您可以在official docs中了解更多有关Husky的信息,您绝对应该留下一颗星星到GitHub repository


沙哑的 - Nataliia Kvitovska摄于Unsplash


感谢您阅读本文,希望您发现它很有趣!

我最近启动了我的Discord服务器来谈论开源和Web开发,请随时加入:https://discord.gg/bqwyEa6We6

您喜欢我的内容吗?您可以考虑订阅我的YouTube频道!这对我来说意义重大€
您可以在这里找到它:
YouTube

随时关注我在新文章发布时得到通知;)