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

2019-12-13 19:18:34 +08:00
 xcatliu

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

两年多以来,我们很少推广,主要靠大家口口相传,自然增长。能够超过 google 的规范,说明它确实受到了开发者的欢迎。那么 eslint-config-alloy 到底有什么过人之处呢?

设计理念

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

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

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

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

如今 Prettier 已经成为前端项目中的必备工具,eslint-config-alloy 也没有必要再去维护 ESLint 中的代码格式相关的规则了,所以我们在 v3 版本中彻底去掉了所有 Prettier 相关的规则,ESLint 用来检查它更擅长的逻辑错误了。

至于缩进要两个空格还是四个空格,末尾要不要分号,可以在项目的 prettier.config.js 中去配置,当然我们也提供了一份推荐的 Prettier 配置供大家参考。

2. 传承 ESLint 的理念,帮助大家建立自己的规则

大家还记得 ESLint 是怎么打败 JSHint 成为最受欢迎的 js 代码检查工具吗?就是因为 ESLint 推崇的插件化、配置化,满足了不同团队不同技术栈的个性的需求。

所以 eslint-config-alloy 也传承了 ESLint 的设计理念,不会强调必须要使用我们这套规则,而是通过文档、示例、测试、网站等方便大家参考 alloy 的规则,在此基础上做出自己的个性化。

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

实际上国内有很多团队或个人公开的 ESLint 配置,都参考了 alloy 的文档。

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

无情的推动自动化

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

除此之外,通过自动化的脚本,我们甚至可以将成百上千个 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 了,相信金子终会发光的,也欢迎大家提意见、参与贡献。


说明:

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

8838 次点击
所在节点    分享创造
31 条回复
xcatliu
2019-12-15 18:31:09 +08:00
@zhw2590582 npm 下载量还很多。。不过之前一直没有做国际化,stars 全是中国人,估计有大部分都是从 cnpm 上下载的
xcatliu
2019-12-15 20:03:47 +08:00
@zhw2590582 npm 下载量差距还很多。。不过之前一直没有做国际化,stars 全是中国人,估计有大部分都是从 cnpm 上下载的
dcsite
2019-12-16 09:42:43 +08:00
标题党有意思吗?
herexf
2019-12-16 09:49:26 +08:00
果然不学习就要落后,这些技术我一个都不知道…
xcatliu
2019-12-16 09:54:09 +08:00
@dcsite 标题符合客观事实,也没有故造悬念,正文内容完全贴合标题所述,为何算标题党?
imdoge
2019-12-16 10:17:38 +08:00
同意 airbnb 太严格,全是报错,受不了了我手动改了十几二十处规则....
问下我的 Prettier 格式化有时候 eslint 会报格式不对,主要是三元判断的缩进和 eslint 不一致……
xcatliu
2019-12-16 10:32:22 +08:00
@imdoge Prettier + ESLint 同时使用的时候,需要加上 prettier 的配置 https://github.com/prettier/eslint-config-prettier ,它可以禁用掉所有与 eslint 冲突的规则
will0404
2019-12-16 18:05:48 +08:00
支持。

不过,airbnb 规范有 91.2k 。

“世界第二”竟然才 1.8k ,而“世界第三”竟然 1.3k 就够了。
xcatliu
2019-12-16 18:14:32 +08:00
@will0404 airbnb 垄断了绝大部分市场,这种东西迁移成本高,先发优势大。
standard 算上主仓库的话,还是非常多的,22.9k https://github.com/standard/standard
ohoh
2019-12-17 09:46:29 +08:00
不错,考虑下个项目投入使用
xcatliu
2019-12-17 10:14:00 +08:00
@ohoh 感谢支持~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX