超越 google 成为世界第三,eslint-config-alloy 是如何成功的

eslint-config-alloy 是腾讯 AlloyTeam 创立的一套 ESLint 规则,自 2017 年 8 月发布第一个版本以来,不知不觉中已经收获到 1.2k stars,超过了 eslint-config-google,成为了世界上排名第三的 ESLint 规范1(仅次于 airbnbstandard)。javascript

两年多以来,咱们不多推广,主要靠你们口口相传,天然增加。可以超过 google 的规范,说明它确实受到了开发者的欢迎。那么 eslint-config-alloy 到底有什么过人之处呢?前端

设计理念

随着前端社区的进化,eslint-config-alloy 的设计理念也有更迭,现在它的设计理念已经很先进了:vue

  1. 样式相关的规则交给 Prettier 管理
  2. 传承 ESLint 的理念,帮助你们创建本身的规则
  3. 高度的自动化:先进的规则管理,测试即文档即网站
  4. 与时俱进,第一时间跟进最新的规则

1. 样式相关的规则交给 Prettier 管理

Prettier 是一个代码格式化工具,相比于 ESLint 中的代码格式规则,它提供了更少的选项,可是却更加专业。java

现在 Prettier 已经成为前端项目中的必备工具,eslint-config-alloy 也没有必要再去维护 ESLint 中的代码格式相关的规则了,因此咱们在 v3 版本中完全去掉了全部 Prettier 相关的规则,ESLint 用来检查它更擅长的逻辑错误了。react

至于缩进要两个空格仍是四个空格,末尾要不要分号,能够在项目的 prettier.config.js 中去配置,固然咱们也提供了一份推荐的 Prettier 配置供你们参考。git

2. 传承 ESLint 的理念,帮助你们创建本身的规则

你们还记得 ESLint 是怎么战胜 JSHint 成为最受欢迎的 js 代码检查工具吗?就是由于 ESLint 推崇的插件化、配置化,知足了不一样团队不一样技术栈的个性的需求。github

因此 eslint-config-alloy 也传承了 ESLint 的设计理念,不会强调必需要使用咱们这套规则,而是经过文档、示例、测试、网站等方便你们参考 alloy 的规则,在此基础上作出本身的个性化。typescript

因为 React/Vue/TypeScript 插件的文档没有中文化(或中文的版本很滞后),因此 alloy 的文档很大程度上帮助了国内开发者理解和配置个性化的规则。工具

实际上国内有不少团队或我的公开的 ESLint 配置,都参考了 alloy 的文档。测试

3. 高度的自动化:先进的规则管理,测试即文档即网站

无情的推进自动化

eslint-config-alloy 经过高度的自动化,将一切能自动化管理的过程都交给脚本处理,其中包括了:

  • 经过 greenkeeper 和 travis-ci,自动检查 ESLint 及相关插件是否有新版本,新版本中是否有新规则须要咱们添加
  • 自动检查咱们的规则是否包含了 prettier 的规则
  • 自动检查咱们的规则是否包含了已废弃(deprecated)的规则

除此以外,经过自动化的脚本,咱们甚至能够将成百上千个 ESLint 配置文件分而治之,每一个规则在一个单独的目录下管理:

  • 经过脚本将单个的配置整合成最终的一个配置
  • 经过脚本将单个配置中的 description 和 reason 构建成文档网站,方便你们查看
  • 经过脚本将单个配置中的 bad.jsgood.js 输出到网站中,甚至能够直接在网站中看到 bad.js 的(真实运行 ESLint 脚本后的)报错信息

这样的好处是很是明显的,测试即文档即网站,咱们能够只在一个地方维护规则和测试,其余工做都交给自动化脚本,极大的下降了维护的成本。简单来讲,当咱们有个新规则须要添加时,只须要写三个文件 test/index/another-rule/.eslintrc.js, test/index/another-rule/bad.js, test/index/another-rule/good.js 便可。

4. 与时俱进,第一时间跟进最新的规则

ESLint 的更新很快,几乎每周都有一个新版本,有时有新规则,有时会废弃已有规则,并且相关插件(React/Vue/TypeScript)也会时而更新,没有自动化工具的话,实在是难以跟进。

eslint-config-alloy 经过上述的自动化工具,能够在第一时间就收到 greenkeeper 提的 issue,告诉咱们哪一个插件更新了,其中的 travis-ci 构建日志会告诉咱们哪些规则须要添加:

这样就实现了,在前端社区快速更迭的时候可以及时跟进最新的规则,永远保持 eslint-config-alloy 的活力和先进。

如何使用 eslint-config-alloy

请直接参考 GitHub网站,这里再也不赘述。

Q & A

为何要重复造轮子

其实咱们团队最开始使用 airbnb 规则,可是因为它过于严格,部分规则仍是须要个性化,致使后来越改越多,最后决定从新维护一套。通过两年多的打磨,如今 eslint-config-alloy 已经很是成熟与先进,也受到了公司内外不少团队的欢迎。

为何不用 standard

standard 规范认为你们不该该浪费时间在个性化的规范了,而应该整个社区统一一份规范。这种说法有必定道理,可是它是与 ESLint 的设计理念背道而驰的。你们还记得 ESLint 是怎么战胜 JSHint 成为最受欢迎的 js 代码检查工具吗?就是由于 ESLint 推崇的插件化、配置化,知足了不一样团队不一样技术栈的个性的需求。

因此 eslint-config-alloy 也传承了 ESLint 的设计理念,不会强调必需要使用咱们这套规则,而是经过文档、示例、测试、网站等方便你们参考 alloy 的规则,在此基础上作出本身的个性化。

因为 React/Vue/TypeScript 插件的文档没有中文化(或中文的版本很滞后),因此 alloy 的文档很大程度上帮助了国内开发者理解和配置个性化的规则。

实际上国内有不少团队或我的公开的 ESLint 配置,都参考了 alloy 的文档。

相比于 airbnb 规则有什么优点

  1. eslint-config-alloy 拥有官方维护的 vue、typescript、react+typescript 规则,相比之下 airbnb 的 vue 和 typescript 都是第三方维护的
  2. 先进性,保证可以与时俱进,前面已经重点提到了
  3. 方便个性化定制,包含中文讲解和网站示例

你这个确实很好,我仍是会选择 airbnb

不要紧,eslint-config-alloy 从设计理念上就相信不一样团队不一样项目能够有不一样的配置,虽然你选择使用 airbnb,可是当你有个性化配置需求的时候,仍是能够来咱们网站上参考一下哦~

有什么后续规划吗

最近刚开始作国际化,已经开始有外国友人 star 了,相信金子终会发光的,也欢迎你们提意见、参与贡献。


说明:

<span id="1"></span>1: 以 stars 数量排名,其中 airbnb 仓库名是 airbnb/javascript 故搜索结果中没有

相关文章
相关标签/搜索