打造 10000 Star 的前端开源项目 ⭐

在工作学习之余,你可能会萌生做一个开源项目的想法。一方面将自己的好代码分享出去帮助更多开发者,另一方面也希望在开源社区中得到反馈和成长。如果项目能获得很多的关注那更是锦上添花,高 Star 不仅是衡量开源项目可靠程度的一个重要依据,这样项目维护者的 Github 也能在招聘中让公司提前了解候选人的开源贡献、技术热情和编程习惯等,获得面试官的加分。

那么,开源项目怎么才能获得更多的 Star 数呢?这里通过总结我这段时间维护 Day.js 项目的过程中的一些经验教训,来说说如何改进和推广你的开源项目。

瞄准用户痛点

开源社区的内容包罗万象,整理收藏的 Markdown 笔记、 框架全家桶的搭建、炫酷的动画效果以及各种工具库、框架等都是很好的开源方向,但是考虑到项目的功能、受众、开发语言等等因素,不同类型的项目实现起来的难度和被社区接受的程度也千差万别。但如果项目能瞄准开发者的痛点,提供优秀的解决方案,就有获得更多关注的可能。一个人的精力始终是有限的,只有更多的人加入进来,使用、反馈、迭代和推广,才能形成开源项目的良性循环。

比如我在工作中发现 Moment.js 虽然能很方便地处理日期和时间但这个库打包体积太大了,而要想迁移到社区其他几个轻量的时间库又会增加新的学习成本和迁移工作量。所以开发 Day.js 的目标就是做一个和 Moment.js 一样 API 设计,一样功能,更加轻量的时间日期库。

选择开源协议

相较与项目本身的代码和文档等,开源协议可能是一个容易被忽视的细节。开源协议是软件的授权许可,表述了用户获得你开源的代码后拥有的权利和义务。

我在初期推广时就犯了个错误,没意识到开源协议的重要性,也没有给项目添加任何协议。在版权意识相对更强的英文社区宣传时就遇到了很大的阻力和各种质疑,他们觉得这样的项目是不专业的,也不敢去轻易尝试,就这样白白错失了一部分初始用户。

关于怎么去选择一个适合项目的开源协议,可以参考这个网站 Choose License。如果你希望项目可以尽可能被广泛地推广、使用和传播,就可以考虑选择一个分发自由度比较高的开源协议。

规范提交记录

使用一个规范的 Git 提交记录是很有必要的,这不仅让多人开发中的参与者能更好地了解项目的迭代历史和进程,也能在出现问题时快速定位,找到问题代码的提交记录。同时我们还可以使用工具根据提交记录自动生成更新说明 (CHANGELOG),方便用户了解每次更新的具体内容,也免去了项目维护者手动更新的痛苦。 目前前端社区中使用较多的 Git Commit 提交规范是 Angular 规范 (Git Commit Message Conventions ),Commit 的格式包含 Header、Body、Footer 三个部分:

<type>(<scope>): <subject>

<body>

<footer>

但如果每次提交代码的 Commit Message 都需要我们按照上述格式来录入的话还是一件又累又容易忘记的苦差事。推荐两个工具来辅助我们的操作:

  • 使用 commitizen 进行交互式的 Commit 填写,如下图所示,只需要按照提示选择更新的 type 和填写必要的信息,就能自动生成符合规范的提交记录;
  • 使用 @semantic-release/changelog 来根据 Commit 中 type 自动增量生成 CHANGELOG;
    1545881851980-73329c81-c525-4add-a76b-5e48a2240ec0.png

语义化版本号

每个社区都有自己的版本号规范,千万不能因为是自己的开源项目就随心所欲地填写版本号,不然可能会给使用者带来不必要的麻(彩)烦(蛋)。在 NPM 生态圈中绝大部分包都是使用语义化版本号 (Semantic Versioning),即版本号为 a.b.c 的形式,其中 a 是大版本号,b 是次版本号,c 是修订号。

如果开源项目有按上文所述规范地提交 Commit ,就可以使用 semantic-release 来实现全自动更新版本号和发布,这个工具会判断 Commit Message 的不同,fix 增加修订号,feat 增加次版本号,而包含 BREAKING CHANGE 的提交增加大版本号。

推广和分析

酒香也怕巷子深,再精美的项目,如果作者自身没什么知名度,又没有太多推广的话,这个项目很有可能就被淹没在众多开源项目之中了。除了在众所周知的国内开发社区推广之外,希望大家也不要忽视了国外的社区和论坛。要知道虽然中文开发者数量越来越多,但也只占到全球开发者的一部分,为了获得更多关注,我们有必要把开源项目国际化,来帮助更多的开发者。而英语是软件开发者们的通用语言,翻译一份英文版的 README 就是走向国际化的第一步。

在推广 Day.js 的过程中,我会在 Twitter 大佬们吐槽 Date 函数、 Moment.js 库的推文下,介绍我的项目的特点,希望他们可以尝试一下(但要有礼貌,广告别太硬)。社区红人的一个 Star 或一条支持的推文就能依靠社交网络快速传播,给项目带来巨大的流量和很高的关注度。


1545739713002-1310bdec-c85f-4fa5-985e-3593994569a1.png

在每次的重大功能更新或集中推广之后,我们要通过项目的 Pull request, Issue, Star, Download Count 等数据的变化来了解推广效果和用户的满意度。前端工程师都知道,比起一堆数字,可视化的数据图表可以帮助我们更好地理解数据。

npmjs.com 展示下载量变化的折线图,可以分析项目被使用和被依赖的情况。bestofjs.org 展示了项目 Star 数变化的日历色块图,格子越深说明增量越快。下图深色的小块就是项目几次比较成功的推广,而有些推广并没有带来很大的增长就需要总结经验并改善方法了。

1545652445839-b1b3306f-fb33-48f1-8be0-ab76d909c1b7.png

开始做一个开源项目并不难,要勇敢地迈出自己的第一步。但是持续维护开源项目并不是一件很容易坚持下来的事,我们需要找到自己维护项目的动力,给用户提供必要的支持,收集用户的反馈,不断完善项目,进而形成一个完整的产品闭环来推动项目的不断迭代更新。

当然能做到这些, Star 数量的多少已经不是那么重要了,我们丰富了开源社区的内容,帮助了更多的开发者,也从开源的经历中得到了视野的拓展,能力的提升,这才更有价值的收获。

P.S. 如果你热爱前端,热爱开源,欢迎加入我们团队,这里有网红开源 UI 库 Element,承接了公司 98% 前端项目的发布系统,比 jsdeliver 更好用的静态资源管理平台和更多有意思的项目等着你。请联系 kun.zhu@ele.me ,饿了么大前端有你更精彩。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 边城遐想 翠翠单薄的纯情 斑驳成古城墙上的石磬 风中期盼的双眼 凝望着野渡那头 身披蓑衣的少年 足音踏响青石板 踏...
    采葭小妖阅读 413评论 10 14
  • 17年的一百块只可以跟小伙伴吃一顿饭,住一晚廉价宾馆。再也不能像小时候一样有一百块钱就感觉自己是个皇帝了,虽然我小...
    哔爆壳斯阅读 173评论 0 0
  • ①亲今天我要感恩爸爸给我做饭 ②今天我要感恩妈妈激励我 ③我要感恩今天为我上课的老师
    睦森阅读 98评论 0 1
  • 学习认错是大修行 人常常不肯认错,凡事都说是别人的错,认为自己才是对的,其实不认错就是一个错。认错的对象可以是父母...
    xcy无名阅读 229评论 0 0