您要做的三件事不是在您的存储库中想要:
- 未格式化的代码
- 警告/错误
- 失败测试
是否有一种简单的方法可以防止这些发生?当然,只需确保在推出代码之前先格式化代码,运行衬里并启动测试套件即可。而且,请告诉您的团队做同样的事情。
什么可能出了什么问题?一切:D
如果解决方案要求人们必须记住要做某事,则可以确定它不会起作用。
git钩
使用GIT钩子自动化此过程的可能解决方案。它们基本上是每次在GIT存储库中发生特定事件时自动运行的脚本。例如,您可以在git commit
(格式和柔软)之前或git push
(tests)之前运行脚本。
如果相关挂钩失败,您也可以使操作失败(在这种情况下为提交或推动)。
这听起来很棒,但是有一个问题:git钩不是存储库的一部分。它们存储在本地存储在.git
文件夹中,该文件夹未版本。这意味着每当您或同事克隆一个存储库时,他们都必须再次设置钩子。
看来我们仍在陷入同一陷阱中,人们必须记住手动做某事。不会工作。
沙哑的ð¶
害怕不要!您可以请沙哑帮助您。
我的意思是,不是狗,而是一个非常酷的节点包,称为Husky。
沙哑的工作主要是两件事:
- 您可以在存储库中定义git挂钩并将其保留为版本,以便每个人在克隆仓库时都具有代码。
- 运行
npm install
(或yarn
)时,它将自动为您设置钩子,这意味着您可以确保每个人都有它们。
那有多酷?实际上,这涵盖了我们之前遇到的两个主要问题!
如何使用它
我录制了一个视频,在其中逐步浏览了在存储库中设置沙哑的过程,并带有两个钩子:
-
pre-commit
:在上演文件上运行prettier
和eslint
-
pre-push
:运行测试套件
没有时间观看视频?您可以在YouTube上的“稍后观看”上添加它,从那里有一些值。
无论如何,这是一个快速摘要:
先决条件
在此示例中,我将使用prettier
和eslint
进行格式化和提起代码。我还将使用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"]
}
此配置运行prettier
和eslint
,并在js
和ts
文件中具有给定参数。
沙哑的设置
您可以关注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 install
或yarn
安装钩子,然后完成了!
前挂钩
这个不是赫斯基生成的,因此我们必须手动创建它。
您可以手动创建一个名为.husky/pre-push
的文件或运行此命令:
npx husky add .husky/pre-push "npm test"
这将创建文件并将npm test
命令添加到它。再次运行npm install
或yarn
,以便在您的存储库中正确设置钩子。
旁观沙哑
有时制定太严格的规则可能会令人沮丧,尤其是当您急忙而您只想推动代码并回家时。
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-commit
和pre-push
,但Husky支持所有可用的Git Hooks。
您可以在official docs中了解更多有关Husky的信息,您绝对应该留下一颗星星到GitHub repository。
沙哑的 - Nataliia Kvitovska摄于Unsplash
感谢您阅读本文,希望您发现它很有趣!
我最近启动了我的Discord服务器来谈论开源和Web开发,请随时加入:https://discord.gg/bqwyEa6We6
您喜欢我的内容吗?您可以考虑订阅我的YouTube频道!这对我来说意义重大€
您可以在这里找到它:
随时关注我在新文章发布时得到通知;)