超越 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 故搜索结果中没有

9054 次点击
所在节点    分享创造
31 条回复
zhw2590582
2019-12-13 19:34:48 +08:00
前排大佬合影
mazyi
2019-12-13 19:48:12 +08:00
大佬又去腾讯了?
xcatliu
2019-12-13 19:50:16 +08:00
@mazyi 已经来腾讯两年多啦
flyfinec
2019-12-13 20:32:36 +08:00
airbnb 的规则太繁琐,需要调整很多配置才能正式干活,挺多规则个人感觉没必要,需要给程序员一定的自由度。
standard 缺乏个性化,比如配置个带分号的得用另外一个库。
目前新代码库在用 eslint-config-alloy,基本不用调整配置能开始干活,希望以后别越整越复杂,或者有一个宽容度比较高的模式。
xrr2016
2019-12-13 20:48:53 +08:00
回去试试👏
xcatliu
2019-12-13 20:56:01 +08:00
@flyfinec 感谢支持!看到有开发者喜欢我们的项目特别欣慰!以后也要加油做的越来越好!
xcatliu
2019-12-13 20:56:38 +08:00
@xrr2016 感谢支持~有什么问题可以问我或提 issue
flyfinec
2019-12-13 21:03:10 +08:00
:) 加油!
yhxx
2019-12-13 22:10:28 +08:00
在用 alloy 的+1,前几天刚在 alloy 基础上搞了个我们自己的包

airbnb 和 standard 的用起来都不顺手
lxml
2019-12-13 23:14:43 +08:00
今天下午刚入坑的用户表示 https://alloyteam.github.io/eslint-config-alloy/ 这个 网站 amazing 比 eslint 文档看起来直观多了

不过没折腾明白怎么能配置全局唯一的 eslint 和 prettier 规则,不用每个项目都按照一次。
xcatliu
2019-12-14 00:16:12 +08:00
@yhxx 感谢支持!我们也是觉得 airbnb 和 standard 不顺手才新造的轮子。慢慢的就做的越来越完善了。
xcatliu
2019-12-14 00:19:18 +08:00
@lxml eslint 配置建议跟着代码仓库走,方便多人协作,和接入 ci。
如果非要全局配置也是可以的,npm 安装 eslint 及相关模块的时候使用 -g 全局安装,然后在根目录下创建 .eslintrc.js 应该就可以了。
love
2019-12-14 08:16:19 +08:00
感觉有些东西不应该个性化,比如空两格还是空 4 格,大家不都空两格
g0thic
2019-12-14 09:42:38 +08:00
你不说 我还不知道谷歌也出了个这玩意配置
lxml
2019-12-14 16:48:23 +08:00
@xcatliu #12 嗯,也是,CI 没法全局,还是跟着官方建议走好了。其实我觉得 js 的 lint 和 格式化要是能有一个二进制工具一站式搞定多好,不用 eslint + prettier 了
yhxx
2019-12-15 14:20:40 +08:00
@love 并不是,比如我就是 4 格的
love
2019-12-15 14:25:51 +08:00
@yhxx 你这是逆大势而行,我刚开始从 py 转 js 时也是 4 空格,后来不得已转 2 空,现在 2 空真香,可读性更好
xcatliu
2019-12-15 14:33:45 +08:00
@g0thic 摔!不小心给竞品也打广告了
zhw2590582
2019-12-15 14:43:46 +08:00
看了下,谷歌的有 35k 使用量
yhxx
2019-12-15 15:05:29 +08:00
@love 你需要一个带鱼屏了(逃

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

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

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

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

© 2021 V2EX