如何使你的开源项目成功?基础知识_开源菜鸟教程下载

你已经为一个有趣的问题工作了几个月,现在决定启动一个开源项目。你在 README.md 中编写了一些说明,并发布了1.0版。几周后,人们对这个项目仍然没有什么兴趣。你做了大量的工作,付出了最大的努力,但是最后,仍然没有谁对它感兴趣。怎么会这样?更重要的是,怎样才能使你的开源项目成功?我创建了一个开源库 vocajs.com,经过努力,这个库成为了 GitHu

如何使你的开源项目成功?基础知识

你已经为一个有趣的问题工作了几个月,现在决定启动一个开源项目。你在 README.md 中编写了一些说明,并发布了1.0版。几周后,人们对这个项目仍然没有什么兴趣。你做了大量的工作,付出了最大的努力,但是最后,仍然没有谁对它感兴趣。

如何使你的开源项目成功?基础知识_开源菜鸟教程下载

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

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

1.没人关心你的项目

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

不幸的是,事实并非如此……

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

2.解决实际问题

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

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

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

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

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

  • 思考你遇到的问题。你可以为此创建解决方案吗?
  • 探索被广泛使用但性能中等的开源项目。可以实施自己的更好的解决方案。
  • 在 GitHub 的热门项目、Stackoverflow 问题甚至 Twitter 问题中搜索想法。

关键点

3. 强调质量

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

但是,当你为所有人开放代码时,情况就不同了。

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

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

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

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

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

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

关键

 

4.优秀的 README.md 和文档

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

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

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

如果 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 的附加页面。

详细文档示例:lodash,ant.design。

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

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

关键

5. 展示 demo 和截图

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

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

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

6. 尝试建立社区

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

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

有时您会遇到沮丧的用户,无论如何,找到了与大家礼貌地交流的意愿。

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

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

关键

7. 让全世界都知道

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

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

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

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

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

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

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

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

8.结论

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

首先,项目必须能够解决一个问题,并将其解决好。开发人员正在为他们的问题寻找更好的解决方案。你必须花费大约 50% 的时间来创建高质量的 README.md 和详细的文档。对于用户而言,工具的使用应该尽可能省力。

拥有良好的代码覆盖可以建立对代码质量的信任。也不要忘记对非功能性需求进行投资,例如支持许多环境且几乎没有依赖性。尝试与项目的用户进行交流。他们将经常报告问题并提出改进建议。要礼貌和建设性的沟通:你的目标是吸引贡献者。

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

海计划公众号
(0)
上一篇 2020/03/23 18:39
下一篇 2020/03/23 18:39

您可能感兴趣的内容

  • The Verge教程视频一家美国科技媒体网站

    The Verge指南攻略 官方网址:https://www.theverge.com/ 简介描述:一家美国科技媒体网站 The Verge网站提供新闻、产品评论、播客、视频等内容…

    2020/03/06
  • ReactJS Components: 基础指南入门基础_Component菜鸟教程

    创建和管理React组件的各种方式,涌现的大量状态管理工具等等都是这些挑战的焦点。我们今天能做的就是在React(基于社区选择)中将最常用的做法引入桌面并讨论它们。 常规的 React Component按照常规,我的意思是常见的,你可能在大多数代码库和文章中看到过:var Hello = React.createClass({render: functi

    2020/04/05
  • Verdaccio小白基础_一个轻量级的私有npm代理注册表

    Verdaccio小白基础 官方网址:https://www.verdaccio.org/ GitHub:https://github.com/verdaccio/verdacci…

    2020/03/06
  • 前端的正则表达式:基本概念使用说明_正则教程视频

    正则表达式(regex)是定义搜索模式的字符序列。由于对程序员的日常工作非常有用,所以在 JavaScript 中也支持它。在这个系列文章中,我会向你展示其工作方式以及其实际用途。希望在结束本系列后,你将能够轻松的写出自己的正则表达式。创建正则表达式的方法在 JavaScript 中可以通过两种方式去构造正则表达式。要完全理解它,你需要知道正则表达式包含在两

    2020/03/23
  • HTML5的<progress>标签怎么用?使用攻略_标签使用攻略

    标签表示任务的进度(进程),例:可定义完成多少工作,还有多少工作可以下载等等。该标签可与JavaScript结合使用,来显示任务的进度,创建动态的进度条。注释: 标签不适合用来表示度量衡(例如,磁盘空间使用情况或查询结果)。如需表示度量衡,请使用 标签代替。语法:<progress value=""

    2020/03/26
  • JS 新语法「可选链」「双问号」已进入 Stage 3入门教程_语法使用教程

    你可能写过这样的代码var street = user.address && user.address.street;有了这个新语法,你可以写成var street = user.address?.street你可能还写过这样的代码var fooInput = myForm.querySelector(‘input[name=foo]’)
    var fooVa

    2020/03/26
  • Zebkit小白攻略_基于HTML5 Canvas 的UI框架

    Zebkit小白攻略 GitHub:https://github.com/barmalei/zebkit 简介描述:基于HTML5 Canvas 的UI框架 遵循简单OOP概念的J…

    2020/03/07
  • React Native 添加 Redux 支持菜鸟攻略_native入门教程

    0x1 前言之前写的项目都是人家编写好的脚手架,里面包含项目所需的环境文件,但由于有些东西用不到打包增加软件体积,所以自己从头搭建个环境。是基于 Native Base + react-navigation + Redux 的 React Native 脚手架,现在项目环境如下:{“name”: “app”,”version”: “0.0.1”,”priva

    2020/03/26
  • 我拉网入门基础_办公设计,创意模板下载,PPT模板,简历模板

    我拉网入门基础 官方网址:https://www.55.la/ 简介描述:办公设计,创意模板下载,PPT模板,简历模板 我拉网是一家专注办公创意模板下载的网站,涵盖行业优质精品PP…

    2020/03/06
  • ts中类的定义小白教程_类攻略教程

    ①ts中定义类:class Person{name:string; //属性 前面省略了public关键词constructor(n:string){ //构造函数 实例化类的时候触发的方法this.name=n;}run():void{alert(this.name);}}
    var p=new Person(‘张三’);p.run()
    ②ts中

    2020/03/23
  • Pageblox入门攻略_一款在线生成布局的工具

    Pageblox菜鸟攻略 官方网址:http://www.csslayoutgenerator.com 简介描述:一款在线生成布局的工具 Pageblox【CSS Layout G…

    2020/03/06
  • 大话爬虫的实践技巧小白教程_爬虫入门百科

    图1-意淫爬虫与反爬虫间的对决数据的重要性如今已然是大数据时代,数据正在驱动着业务开发,驱动着运营手段,有了数据的支撑可以对用户进行用户画像,个性化定制,数据可以指明方案设计和决策优化方向,所以互联网产品的开发都是离不开对数据的收集和分析,数据收集的一种是方式是通过上报API进行自身平台用户交互情况的捕获,还有一种手段是通过开发爬虫程序,爬取竞品平台的数据,

    2020/04/05
  • 微信小程序视图层处理增强之WXS小白知识_小程序使用指南

    熟悉微信小程序开发框架的开发者,肯定会对其视图层WXML中缺失的一个功能耿耿于怀,那就是没有办法在视图层对数据进行格式化处理。比如我们从后端获取到一个包含了时间戳数据的数组,然后需要在界面上把这些日期都格式化显示为2017-01-01这种格式的日期形式,在Vue, Angular之类的前端Web框架中,一般在视图层都提供了如filter之类相应比较好用的方案

    2020/04/03
  • 如何写出优美的javascript代码?小白常识_代码入门基础教程

    在多年以前,人们注重功能是如何实现的。现如今,随着Web及互联网技术的不断发展,功能仅成了最基本的要求,如何写出漂亮,整洁的代码已成为一个大牛级程序员不可或缺的条件。写出优美的JavaScript代码的方法:少写代码提前设计能有助于少写代码,增强全局感。而代码写得少还能防止失控——感觉不对时就应该停下来,腾出时间来思考,为什么会偏离最先的想法。遵行惯用法注释

    2020/03/22
  • Vuejs讲解之:响应式、过渡效果、过渡状态菜鸟指南_vue作者: gongyunit零基础入门

    1Vuejs高级之:响应式1.1 如何追踪变化Vue实例使用Object.defineProperty将普通js对象属性转为getter和setter用户可以使用vue-devtools调试每个Vue实例有相应的watch程序实例,可以检测并更新相关的组件图形表示如下:1.2 变化检测问题受JS的限制,属性需要放在data对象上才能让它是相应的动态设置响应属

    2020/04/06
  • Critical使用说明_生成并内联关键路径CSS

    Critical使用说明 GitHub:https://github.com/addyosmani/critical 简介描述:生成并内联关键路径CSS Critical是处理上C…

    2020/03/06