猎头公司是一家产品公司,代码的质量对我们非常重要。 效果越好,我们发布新业务功能的速度就越快,用户越会喜欢。
对于每个拉取请求,即使只更改了一行,您也必须通过审核。 至少需要一个人进行评估,该审查是公开的,任何人都可以参加,这是值得欢迎的。 必须进行审核以提高代码质量并在不同团队之间传播知识。

以前,该评论一直围绕如何正确书写以及如何正确书写进行了辩论。 花了很多时间和精力。 为了解决这些问题,编写了样式指南。 作为真理的源头,他提供了很多帮助,可以随时提及。 样式指南还可以帮助初学者进入项目,立即说明编写的内容和方式,以及在审核中期望得到的内容。
然而,样式指南存在一个大问题-人们经常忘记他,他不得不不断地重新阅读并链接到拉动请求,以证明他是对的。 结果,审查有时会陷入有偏见的纠纷,结果是这样的:

您自己会了解,这多少会使开发人员受挫,以及在审核中花了多少时间处理无用的争议。 结果,人们不想审查和审查其他开发人员。
为了使代码编写的负责人和审阅者不再忙于如何放置逗号以及以何种顺序编写border
规则的问题border
我们决定实施自动化,当时它是jshint ,它变得更好了。 切换到eslint后,具有许多优点:
- 他比较灵活
- 有各种各样的插件。
- 不同的公司都有好的现成的配置
长期以来,我们继承了airbnb
,但并不是所有适合我们的airbnb
,我们都必须重新定义一些规则。 这不是很方便,因此我们基于airbnb编写了配置。 我们还添加了precommit钩子,当时我们使用husky 。 如果开发人员写错了什么,他会在尝试将更改提交给github时立即发现。
但是遗憾的是,eslint并未涵盖代码格式化的所有方面, 因此添加了更漂亮的代码来解决此问题。
幸运的是,eslint和pettertier可以很好地协同工作,您只需要将eslint-plugin- prettier和eslint-config-prettier放置在一起,然后.eslintrc
如下所示修复.eslintrc
:
... "plugins": ["prettier"], "extends": ["@hh.ru/eslint-config", "prettier"], "rules": { "prettier/prettier": ["error"], ...
在将所有这些发布给产品之前,有必要遍历整个代码库并对其进行纠正以符合新规则,事实证明这并不困难: yarn eslint --fix <path_to_js>
在那之后,关于如何编写和格式化代码的大多数争论都消失了,因为一切都被自动化所覆盖。 现在共有:
- 所有的js和jsx都使用eslint和pettitier进行了检查和自动修复。
- 更少地使用stylelint 。
- 对于python flake8。
提交时,使用lint-staged在开发人员的计算机上检查修改过的文件,这是我们的.lintstagedrc
:
{ "*.{js,jsx}": ["eslint --fix", "git add"], "*.less": "stylelint", "*.py": "flake8", "package.json": "bash -c 'yarn check-versions && yarn install --frozen-lockfile'", }
已经通过linting和测试的代码进入github;审阅者无需再考虑这一点,只需注意一些小事情。 您可以完全集中精力编写代码,如果有任何性能问题,请考虑一下体系结构。
审查之后,将组装Docker容器,在组装过程中,将运行所有自动测试和短毛绒。 现在整个组装过程大约需要7.5分钟,而现在我们大约有1000个js和650个更少的文件。 所有这些都是必要的,因为您可以在本地机器上使用--no-verify
跳过,并且github中的注释不会阻止任务。 欺骗程序集不起作用。
通过自动测试后,便开始手动测试。 如果测试人员没有找到一个错误,则任务进入生产。
如果在任何阶段发生错误,任务将返回以进行修订。
结果是:
- 编写代码更容易,更快捷。
- 易于审核
- 向导始终具有质量代码
- 减少争议,增加幸福感
我们在执行业务任务期间监视代码的质量,但是产品在不断发展,代码中出现了附加条件,复杂性增加了。 也出现了新技术,老技术因此而消亡,出现了技术税。 作为税收的一部分,我们从事:
所有产品团队应将70%的时间花在开发业务任务上,并将30%的时间花在税收上–这使每个开发人员都有机会参与基础架构任务,保持代码库处于良好状态,并在所有团队中传播有关项目基础架构的知识。 作为一项税,没有必要执行团队的任务;您可以在项目的任何部分中编写代码。 任何人都可以提出税收建议,如果它似乎有用的话,它将被添加到待办事项列表中。 此外,还有一些架构团队一直在处理技术功能。 所有这些使您可以保持代码库为最新。