hi, 大家好, 我是徐小夕. 最近在我的公众号《趣谈前端》中上线了《小夕朋友圈》栏目, 我会定期采访国内外优秀的开源作者和独立开发者, 分享他们的学习成长经验和独立产品开发经验, 让更多热爱技术的小伙伴建立技术自信和技术连接. 同时也让公众号里的5w+程序员伙伴们看到国内优质的开源项目和独立产品.
如果你也是一名独立开发者或者开源作者,欢迎自荐.
今天采访的嘉宾是华为 OpenTiny 开源项目负责人------Kagol.
这次采访主要包含如下几个部分:
- 嘉宾简介
- 聊聊为什么会选择做开源项目,以及目前在做的开源项目
- 从零做开源项目,OpenTiny遇到了哪些机遇和挑战
- 个人或者团队开发者,如果想做好开源项目,需要做哪些准备和规划
- 对于OpenTiny开源之路,当下和未来的一些规划和展望
1. 采访嘉宾介绍
大家好, 我是 Kagol ,从事前端10年多,先后经历过创业公司、腾讯、华为,目前在华为做 OpenTiny 开源项目,主要提供一套前端开发的解决方案,包括UI 组件库、CLI脚手架工具、低代码引擎。
我从 2014 年就开始接触开源,早些年主要是使用开源项目,最早是用 jQuery 以及一些 jQuery 插件。15 年加入腾讯,用过一段时间 Angular.js ,后面我负责广告平台搭建,开始使用 React 、Antd 组件库和 ECharts ,先后给 ECharts 和 Antd 提了一波 issue ,现在还可以看到。在腾讯期间,我养成了写技术博客的习惯,最早是在博客园,后面是掘金,目前写了 100 多篇文章,现在回顾起来,这些博客都是满满的回忆,让我能回忆起过去 10 年努力奋斗和成长的历程。
19 年加入华为,之前写文章的经历对我帮助很大,间接地让我有机会深入开源,真正运营一个有一定影响力的开源项目,目前我已经有 4 个 Star 数超千的开源项目,最快的是只花了 3 个月多突破 1000 Star 。这个阶段我从一名开源使用者成为了开源贡献者,不仅负责技术、也做开源运营。仅仅 2023 年一年,就参加了 10 多场外部技术大会,上海的 GOTC 、HC 大会、北京的开放原子全球技术峰会、东莞的 HDC 大会等,还参加了多场高校活动,北理、北航、上海交大等,给学生普及前端和开源知识。
除了参加活动,还做了多场直播,给开发者分享我们的OpenTiny跨框架组件库,之前还和小夕的 H5-Dooring 有过一次联合直播。
接下来我们进入正题.
2. 聊聊为什么会选择做开源项目,以及目前在做的开源项目
前期我也只是一个开源项目的使用者,最多遇到问题提提issue,并没有想过能真正给开源社区进行回馈,参与开源贡献。
也是在 2020 年初,当时我在华为云 DevUI 团队,当时主要在做一款富文本编辑器,我们主要的业务是 DevOps 项目管理相关的业务,需求管理、Wiki 知识库等很多场景都需要使用富文本编辑器。我当时基于 Quill 为底座,做了一个富文本组件,在 Quill 基础上增强了表格、图片、复制粘贴等大量模块,在做富文本编辑器过程中还写了7篇富文本编辑器相关的系列技术文章,发布在掘金,累计有6W的阅读量。
领导看我写文章还不错,当时 DevUI 组件库已经开源半年了,但一直没什么人关注,于是领导让我写点文章推广一下。
也是这个阶段才开始真正深入接触开源的。
做开源项目和之前在公司做项目还是有很多区别的,在公司做项目一般只能接触到比较固定的开发者,就是你的同事,在开源让你有更多机会接触更广泛的开发者,我也是在做开源的过程中接触到了很多前端和开源大佬。
另一个价值是在公司做项目能接触到的项目和技术都很有限,一般一个公司的业务所使用的技术栈都是固定的,即使你想学习更多的技术,也只能停留在理论层面,顶多多点 demo 项目,但是做开源项目,你可以随意挑选喜欢的项目进行参与,可以选择自己喜欢的技术,而这些项目有可能被很多的业务使用,不是一个没人使用的 demo 项目,而你贡献的代码很可能能为很多业务创造价值。
总结下来, 我觉得做开源项目能给开发者带来如下的价值:
- 开拓自己的思维边界, 让我们的技术视野更加开阔
- 锻炼编码能力和解决问题的能力
- 提高个人影响力和职场竞争力
- 实现程序员的自我价值
目前我在做 OpenTiny 开源项目,刚刚也提到包括一个跨框架的 UI 组件库、支持插件化 CLI 脚手架工具、一个去年9月份刚开源的低代码引擎。
这个项目旨在提供一整套前端应用开发的解决方案,让开发者能够更高效地搭建Web应用。
其中的UI组件库和业界相比有很大的不同,这不仅仅体现在设计规范不同、组件能力不同,更体现在设计架构的区别,我们是想做一个框架无关的面向未来的组件库,这个组件库不仅能用在 React 、Vue 项目中,也能用在未来的可能流行的 Svelte 、Solid.js 上,不仅能用在 PC 项目中,也能用在移动端项目中。而组件库的代码仅有一套,只维护一套组件逻辑。
这是合理的,因为未来不管前端框架如何变迁,组件交互都是相同的,只维护一套代码,能最大可能得降低开发和维护成本,并实现在框架之间平滑迁移。
现在我们已经实现了这套架构,将组件的逻辑抽离成框架无关的 TS 代码,通过开发一个适配层去兼容不同框架,目前已经实现了 Vue2 和 Vue3 的支持,正在开发 React 和 openInula 框架的适配层,已经完成了初步功能,打通了组件库构建、发布流程,后续只需要增加组件模板就行。
组件库只是 OpenTiny 社区的一个项目,我们还有配套的 CLI 脚手架工具、Admin 后台管理模板、在线主题配置系统等多个开源项目,2023年9月,我们又新开源了一个 TinyEngine 低代码引擎,也受到了广泛的关注,目前已经超过 1000 Star了.
3. 从零做开源项目,OpenTiny遇到了哪些机遇和挑战
业界组件库,大部分都是某个框架的组件库,比如 antd 是 React 组件库,elementui 是 Vue 组件库,其他框架都通过社区实现,并且和官方的组件库代码是分开的,是独立的项目,没有实现复用。
这样存在的问题就是开发和维护成本高,并且开发一套新框架的组件库基本就是从头再来。
这对于 OpenTiny 组件库来说是一个巨大的机遇,我们的目标是实现一个框架无关的组件库,能面向未来的组件库。
我们基于此实现了 renderless 设计架构。
挑战就是目前市面上的开源组件库太多了,而且有老牌的 antd 和 elementui,他们占据了大部分市场, 生态也比较丰富。
那么如何破局呢? 我这里给出几个方向.
首先就是加大宣传,让更多开发者了解跨框架组件库的优势,能给开发者带来的好处,特别是长期的收益。
第二就是加快其他框架的适配,比如React 、Svelte 、Solid.js 等,还有新兴的 opneInula 框架等,占领新兴市场。
第三就是积累种子用户(通过给用户赋能价值),打造企业用户标杆,获得社区开发者的信任。
第四就是打造活跃的社区,积极响应 issue 和用户问题,打造一个繁荣活跃的社区,号召社区开发者一起参与共建,一个人的力量有限,群策群力才是开源最大的魅力所在。
4. 你觉得个人或者团队开发者,如果想做好开源项目,需要做哪些准备和规划
(比如如何做技术建设,如何运营,如何可持续投入,如何建立生态等)
回顾之前做 DevUI 开源项目和 2023 年开始做新的开源项目OpenTiny,我也总结了一些经验,希望能给其他小伙伴一些参考。
经验一 :第一就是想清楚项目的独特价值点,你打算做的开源项目一定是和现有开源项目不一样的,能解决未曾解决的用户痛点的。比如 Webpack 冷启动速度慢,所以有了 Vite。
另外就是要行动起来,我有一个好的点子,这时可以立马写一个 POC 进行验证,验证没问题的话,就可以创建一个开源项目,不一定要多么完善才开源,有最核心的能力,并把流程打通就够了,后续就是不断地完善。除了功能上的完善之外,尽量引入新的流行的技术,这样更容易吸引到开发者,创建活跃的社区。另外就是需要注意文档的建设,不要吝啬写项目描述、写README、写贡献指南的时间。
还有就是规范和质量保障,前期可以宽松一些,吸引更多贡献者参与共建,后续随着贡献者的增多,需要通过一些工具保障统一的提交规范和代码风格,完善单元测试确保项目质量,增加构建和单测的PR门禁等。 (可以参考 前端规范实践)
经验二:Star数不是唯一,制定多维度的衡量指标。
- 有多少人知道和尝试了解: PV/UV
- 有多少人感兴趣和体验:Star 数、 NPM 下载量
- 有多少人使用和反馈: NPM 下载量、 Issue 数
- 有多少人喜欢和推荐:Star 数
- 有多少人参与贡献和活跃:贡献者数量、PR数
经验三:有人用的开源项目才能长久,通过找到合适的用户,帮助开源项目成长。
经验四:酒香也怕巷子深,积极推广你的开源项目,让更多社区开发者看到你的努力。
写文章、做直播、参加活动。
经验五:凝聚人心才能造就伟大,打造活跃的社区。
下面给大家分享一下我之前研究的用户参与开源的动机分析, 以便大家更好的维护开源项目.
参与开源的动机
2008年神经科学家大卫·洛克提出围巾模型,帮助我们理解人类的社会行为动机。
SCARF 模型:
地位感 ------ 我很重要
确定感 ------ 这边走
自主感 ------ 我自己选择
连接感 ------ 我们一起
公平感 ------ 我们都觉得公平公正
与社区成员互动的10大黄金法则:
- 你的社区成员为社区工作,而不是为你工作
- 他们是你的朋友,朋友会坦诚相待
- 如果你向社区成员寻求帮助,他们通常会施以援手
- 社区成员追求个人认可和满足感
- 社区成员不是公司的免费劳动力 使成员和社区互惠互利
- 社区成员不是销售对象
- 社区成员拥有的信息和背景知识与你不同
- 社区成员可能和你有相同的愿景,但有不同的行事方法
- 社区成员的承诺和贡献程度会有所不同
- 安静的人通常是你的秘密武器
社区参与框架:
- 社区入门模型:参与动机、前期准备、技能培养、切实参与、问题解决、正向反馈
- 社区参与模型:访客、常客、核心成员
总结:
- 想清楚项目价值,有了一个点子就立马做POC验证,创建一个初始的项目,行动起来
- 做开源运营之前,应该树立正确的开源价值观,制定多维度的衡量指标
- 用户声音是驱动产品发挥价值的源动力,持续解决用户痛点,项目才能长久
- 大胆地宣传你的开源项目,让所有人知道你的努力,写文章、做直播、参加活动都可以
社区由人组成,社区繁荣依赖于成员的贡献,将社区成员凝聚在一起,才能创造出更好的开源项目.
5. 对于OpenTiny开源之路,当下正在做的以及未来的一些规划
其实在前面我也聊了一些 OpenTiny 正在做的事情, 我们目前也在做一些技术上的规划, 具体大家可以参考opentiny - discussions, 比如:
新特性:
- 新组件补齐
- 表格组件功能增强和优化
- 富文本组件功能增强和优化
工程优化:
- 文档优化
- E2E测试用例
- TypeScript类型补充
生态扩展:
- React、openInula框架适配
- 移动端组件完善并部署官网文档
- TinyPro 中后台模板功能完善
同时我们也会与时俱进, 和AI能力相结合, 做出更加职能的前端解决方案, 如果你有好的建议, 也欢迎随着在 github 提 issue.