如何使你的开源项目成功

做者:Dmitri Pavlutin

翻译:疯狂的技术宅javascript

原文:https://dmitripavlutin.com/ho...前端

未经容许严禁转载java

你已经为一个有趣的问题工做了几个月,如今决定启动一个开源项目。你在 README.md 中编写了一些说明,并发布了1.0版。react

几周后,人们对这个项目仍然没有什么兴趣。你作了大量的工做,付出了最大的努力,可是最后,仍然没有谁对它感兴趣。git

怎么会这样?更重要的是,怎样才能使你的开源项目成功?程序员

我建立了一个开源库 vocajs.com,通过努力,这个库成为了 GitHub 上最受欢迎的项目之一。在这个过程当中,我学到了一些重要原则,这些原则涉及如何制做高质量的开源项目。我想要与你们分享这些想法。github

1.没人关心你的项目

首做为做者,要转变你对开源的见解。你可能会认为,若是你对你感兴趣的项目(库、工具、框架等)投入了大量精力,那么许多人也应该会感到兴奋。web

不幸的是,事实并不是如此……面试

听起来可能很苛刻,可是开发人员仅对解决他们的问题感兴趣。所以,当有人访问你的 github 存储库时,就是在寻找解决方案。chrome

2.解决实际问题

甚至在启动开源项目以前,甚至在编写第一行代码以前,都要花大量时间去寻找要解决的实际问题。

总而言之,一个好的开源项目解决了开发人员正在积极寻求解决方案的问题。

image.png

根据个人经验,我决定写一个 JavaScript 字符串库。个人主要理由是当时的解决方案质量低下。另外 JavaScript 自己没有全面的标准字符串库。

我对字符串并不特别热衷,建立这样的库甚至可能很无聊……可是更重要的是,我发现了一个须要解决的问题。

寻找问题要用到的一些策略:

  • 思考你遇到的问题。你能够为此建立解决方案吗?
  • 探索被普遍使用但性能中等的开源项目。能够实施本身的更好的解决方案。
  • 在 GitHub 的热门项目、Stackoverflow 问题甚至 Twitter 问题中搜索想法。

关键点

🏛 成功的开源项目解决了一个已知的 问题

3. 强调质量

大多数开发人员都在闭源项目中工做。除了你的队友之外,极可能有一些开发人员会阅读你的代码。

可是,当你为全部人开放代码时,状况就不一样了。

事实是,不少开源代码并非最好的质量。没人会依赖于难以理解、不稳定且充满错误的代码去解决问题。

这方面是增长信任度并证实你的开源项目正在测试质量的好方法。你可能须要至少 80% 的代码覆盖率。

你甚至能够走得更远,并在 README.md 上放一些标记,以证实代码库已通过全面测试。

源代码的可读性也是一个重要方面。若是你想在之后的阶段吸引更多的贡献者,则代码必须易于阅读且结构合理。

此外,开源工具将只从实现非功能性需求中受益:

  • 有直观、可配置和可扩展的 API
  • 支持普遍的环境(跨平台,跨浏览器等)
  • 提供选择功能的可能性
  • 几乎没有依赖关系
  • 体积小

关键

🏛 成功的开源项目具备 高质量代码高代码覆盖率

4.优秀的 README.md 和文档

好,你遵循了个人建议,发现了一个不错的问题,并实施了一个相对不错的解决方案。这就够了吗?

不幸的是,只完成了一半的工做……

README.md 文件是项目的入口点。并且,若是你不能简洁明了地解释项目的确切目的,人们将几乎不了解它的任务。

若是 README.md 缺乏详细信息,你可能会认为开发人员慧深刻研究实现细节,并自行找到如何使用该工具的方法。一般,这种状况不会发生,由于没人喜欢解密代码。

每一个人的指望是了解你的工具能够解决什么问题以及如何使用它。就这样。

告诉你一个对我有效的真理:

花 50% 的时间编写引人注目的 README.md 和简单明了的文档。

是的,你没有看错。花一半时间解释项目的用途以及如何使用它。

4.1 README.md

用户在访问项目存储库时最早看到的是 README.md 文件。你只有20-30秒的时间吸引注意力去兜售你的东西。

我建议 README.md 包含如下部分。

1. 任务

首先用简短的句子解释你的项目的任务:“它作什么?”将其放在项目名称的后面。

例如,对于个人开源库 Vocajs,我用了如下单句进行解释:

Voca 是一个用于处理字符串的 JavaScript 库”

这句话可以告诉你个人项目是作什么的:一个处理字符串的 JavaScript 库。

若是有的话,在任务结束后当即插入指向详细文档的连接。

2. 说明

任务结束后,将进行简短说明:“我为何要用它?”它应该稍微详细说明任务。

例如这就是我用来描述的内容:

Voca 库提供了有用的功能,使字符串操做变得温馨:更改大小写,修饰,填充,段化,拉丁化,sprintfy,截断,转义等。 “模块化设计”容许加载整个库或单个函数以最小化应用程序构建。该库通过了“充分测试”,“有据可查”和“受到长期支持”。”

说明中不要添加太多技术细节。只突出好的部分。

3. 特色

以后,你能够经过列出功能来更深刻地解释技术细节:“它提供哪些功能?”

为了便于阅读请使用列表。

4. 安装和使用

最后描述“如何安装和配置?”

若是有的话,你能够在此处再次插入指向详细文档的连接。

能够把 https://github.com/panzerdp/v... 做为例子。

4.2 文档

若是项目很大,README.md 可能不适合描述详细的 API。须要建立一个仅描述 API 的附加页面。

详细文档示例:lodashant.design

文档简明扼要地说明了全部的使用方面。例如:列举函数的参数,说明可接受的数据类型,并给出适当的示例。

这是我为库中 v.kebabCase() 函数记录文档的方式:

image.png
你能够轻松地了解如何使用 kebabCase() 函数:它的做用、接受的参数以及返回的值。还提供了一些示例。你甚至能够找到到源代码和单元测试的连接。

关键

🏛 成功的开源项目应该具备 引人注目的 README.md出色的文档

5. 展现 demo 和截图

人类是视觉生物。这就是你构建可视工具(图表、UI小部件、移动/桌面应用等)的缘由,我强烈建议你包括 demo 和截图。

一个好的 demo 赛过千言万语。

例如我实现了一个小型的开源 Chrome 扩展程序 Cliboardy。它能将代码从 stackoverflow.com、github.com 和 npmjs.com 复制到剪贴板。

README.md 的开头,我没有文字说明,而是提供了一个演示 gif:

image.png

观看这个演示,你甚至无需阅读说明。

6. 尝试创建社区

与人打交道是管理开源项目的一个重要的部分:与用户沟通、实现新功能、修复错误。

虽然乍一看彷佛不是很重要的,但沟通是一项复杂的任务。响应问题和审查代码pull请求可能比预期要花费更多时间。

有时您会遇到沮丧的用户,不管如何,找到了与你们礼貌地交流的意愿。

准备对某些请求说“No”或拒绝 pull 请求。始终试着礼貌地解释你的决定,并感谢贡献者所花费的时间。

目标是吸引新的人参与项目。有人说,流行的开源项目基于强大的贡献者社区。

关键

🏛 成功的开源项目创建在 有效的沟通活跃的社区

7. 让全世界都知道

一切都准备就绪。你的项目的版本为 1.0,有出色的 README.md 和文档。

如今该推广你的开源项目了:让全世界都知道它。

把你的项目共享到 reddit.com(一个或多个相应的 subreddits)、news.ycombinator.comechojs,Twitter 等。幸运的是,你的项目可能会在普及方面有一个良好的开端。

可是要注意两个微不足道的问题。

首先,抵制发布还没有完成的项目的冲动。先搞定一切。 你永远不会有第二次机会去留下良好的第一印象。

其次,在 Reddit 等网站上分享可能会引来一些键盘侠对你的工做发表严厉评论。不要受到这些评论的影响而使你沮丧。

批评很容易,可是创造却很难。请记住,创造的人是当今的英雄。

接受建设性的批评,忽略垃圾评论。

8.结论

一个成功的开源项目须要付出大量的时间和精力。

首先,项目必须可以解决一个问题,并将其解决好。开发人员正在为他们的问题寻找更好的解决方案。

你必须花费大约 50% 的时间来建立高质量的 README.md 和详细的文档。对于用户而言,工具的使用应该尽量省力。

拥有良好的代码覆盖能够创建对代码质量的信任。也不要忘记对非功能性需求进行投资,例如支持许多环境且几乎没有依赖性。

尝试与项目的用户进行交流。他们将常常报告问题并提出改进建议。要礼貌和建设性的沟通:你的目标是吸引贡献者。

若是你想了解更多信息,我建议你阅读 “Producing Open Source Software” 这本免费书籍。

你知道哪些使开源项目成功的其余策略?请在下面的评论中告诉我


本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,天天都给你推送新鲜的前端技术文章

欢迎扫描二维码关注公众号,天天都给你推送新鲜的前端技术文章

欢迎继续阅读本专栏其它高赞文章:


相关文章
相关标签/搜索