竟然被尤雨溪点赞了:我给Vue生态贡献代码的这一年

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。

这篇文章在知乎被尤雨溪点赞了。不过作者不是我(若川)。以下是正文:


前言

本文主要分享过去一年自己给Vue社区生态贡献代码的经历。

希望自己的经历能给予想尝试/了解如何参与开源贡献的朋友们帮助和参考。

团队的力量

在开始介绍经历之前,我想先跟大家聊聊我对开源贡献的看法。

一个开源项目能火起来的原因可能有很多种,比如解决了某个痛点,提升了某种效率.

但是要活下来却是一定离不开持续维护与迭代,持续不断地为你的用户、下游解决问题和痛点。举个 🌰:

e53265779a13b97adad12d71005d52e1.png

假设我们开源了某个UI库 (基于Vue2),获得了很多用户的喜爱. 而后,Vue2随着发展发布了Vue3,但是我们因为种种原因 (忙着网恋、卷不动了、不爱了)没有兼容Vue3,开始无法满足一些用户的需求,导致用户流失,那其实这个库离退休也不远了(用过一些KPI产物的我们懂的都懂).

一个人的精力是有限的,一个项目要走的更远需要很多优秀开源者的参与和贡献。就拿Vite举例吧,在有人还在调研它适不适合上生产的时候,其实它已经拥有了不错的生态系统: 77866a43b575941a42912c445f24c639.png

Vite核心团队成员patak写了一篇关于Vite生态系统的介绍,其中也感谢了很多大佬的贡献,所以说一个好的项目离不开大家的贡献~

贡献经历

e8d7fe71bfdc421e83862cd9fe31e523.png

关于我的贡献经历我简单总结为三个阶段,贡献的PR比较零散与琐碎,所以每个阶段我只挑选一个相对具备代表性的进行分享~

错别字杀手 (Typo Killer)

故事要从那个炎热的夏天说起,我在调研 vuejs/composition-api的时候在官方文档中发现了文档格式错误,眼里容不得沙子的我 "Fork -> Fixed -> PR " 三连,开启了我尊贵的Vue Contributor (混PR)生涯。

610657c039538dcfea18184f199c52c9.png

为什么我把这个阶段称为"错别字杀手"呢 ?
从上面这个PR我们可以看出,给开源项目贡献代码其实不难,甚至可以说很简单.也正是因为这样,我们很容易迷失,为了功利心去参与,"为了贡献而贡献".这很明显是错误的,我们需要端正好心态。

就这样,我开始了开源贡献的第一步。

问题修复 (Issue Fixed)

大家都知道Vue3有一个script setup语法糖,经过几个月的提案也终于在V3.2定稿,V3.2发布后我也在观察它的稳定情况,是否能应用到生产.在观察的过程中,我在issue中看到了一个Bug Report: aea4594a0f2613eebcb47022f65583ad.png 这个Bug的意思是说defineProps语法生成了不正确的PropType.当时我就在想,是不是在编译script setup语法的时候没有正确处理导致的呢 ? 心里也冒出了一个想法:(确认问题并修复它),但是这时心里又有另一个小恶魔在说:(不行啊,你没有熟读精通Vue源码 逃:) ). 一心想贡献代码 (混PR)的我当然不会放过这次机会了~

如何Debug ?

要确认问题之前我们必须要懂得如何debug代码,不能纯粹靠爱和意念发电,这里我分享下我的思路 (或许有更好的办法),通过测试用例来调试:

  • 打开 Jest(Vue3单测工具)配置文件,将testMatch配置改成你要调试的对应文件

  • 注释掉所有测试用例并编写测试用例 (这里的用例就是上图应用场景)

  • OK,现在你只要找到相关的代码位置 (Vue3采用Mono Repo目录结构,查找相关功能函数还是蛮容易的) 就能进行断点或者打印调试了,并根据测试用例断言验证你的修复成果.

测试用例

给一些集成了自动化测试工具的项目提PR,必须带上相应的测试用例:

  • 保证你的PR能被快速验证

  • 提升代码覆盖率与代码健壮性

0f3fbe8992ad1e709caab949895e045a.png

功能新增 (Feature Request)

大家都知道Vue3引入了Composition API,用于提升逻辑复用能力. 这里要提到的是vueuse,它提供了很多易用且应用场景高频的hook,比如 useLocalStorage,useDebounce等.

我在做需求时,有一个滚动功能需要实现,我发现vueuse并没有提供对应的hook,我认为这个功能是通用并且高频的,如果能将它实现并集成到vueuse那就太酷了.于是我阅读了贡献指南,开始了我的useScroll实现:

1. 新建issue确认可行性

307ef3ed7efd9fc9902dd3e74731deee.png

2. 功能设计

c3f9c1198fec90977764f01136ebbdd5.png

3. 功能实现

不是本文重点,就不贴代码了,有兴趣的👇

4. 提交PR

83068a4e38fd913cf8814442fe43b0cb.png

使用反馈

看到自己实现的功能有人使用并提交PR补充特性,还是蛮开心的 😛

60f02eae315afe79ed650ecd968f4269.png

Project Activity

虽然没啥含金量,还是发出来装下~逃 :) e74399c266e32249affd636a827cacb2.png

贡献指北

在这里,我分享几个给开源项目贡献代码的注意事项:

用英语交流

dda1d83d1bc4719c3cf3ab213c4842a4.png 有的人可能会有疑问,作者明明是中国人,为什么要用英语呢 ? 这里拿Vue举例说说我的看法 :

  • 项目成员来自五湖四海,帮你解决问题的人可能看不懂中文. (毕竟英语是全球通用语言)

  • Vue在国内外都有一定的用户体量,可能有歪果友仁和你遇到一样的问题或对你的解决方案感兴趣,用英语方便大家检索issuePR.

有的大佬会说:"不行啊,我不会英语啊". 其实作者也是一名"翻译选手",有道,谷歌,总有一款翻译软件适合你.(说实话,用久了你会发现你的英语在进步)

4c1d5e50bbcccaa8f8bb2b7635cf62b1.png So, 在提issuePR甚至git commit msg时带上你的english吧~

遵循官方规范

正所谓"没有规矩不成方圆",为了让官方可以更清晰、迅速、准确地定位、复现、解决你的问题,请 :

  • issue时遵循官方模版并准确描述信息.

  • issue时尽量提供最小可复现demo (mini repo),这里可以是CodeSandbox、Github链接等.

  • PR前先阅读贡献指南 (如果有的话).

  • 优雅的提交你的Git Commit Message,最简单的办法就是直接查看你要贡献仓库的Commit History,抄它 !

CI/CD流程

d8c27f0661bc6abc7217ab32895620d2.png 一般开源项目都有一套基于Github Action的CI/CD流程,用于校验和规范贡献者的代码格式和健壮性等.比较常见的就是自动化lint和自动化测试集成.所以我们在提交PR之前最好先跑一遍这个流程确认没问题,这个一般在package.json文件的scripts命令就能看到.

这里有个小技巧就是可以在你的commit message里加上 [skip ci], [ci skip], [no ci], [skip actions],[actions skip]等关键词跳过CI,这个常用于修复文档及错别字等.

bd4d5fd05f2b9653e0ac9c102df56ffc.png

收获成长

成就感

当我们站在巨人的肩膀上使用开源库高效为业务赋能的同时,能尽自己的一份力反哺社区,给到社区一些正反馈,自己也能收获成就感.

技术成长

当我们尝试修复issue和 PR被review的时候,其实在这个过程中我们也在锻炼自己解决问题及编码的能力.

结语

最后想在这里感谢一下大佬 Anthony Fu,一名非常厉害的全职开源者.感叹你在保持多个项目的维护与贡献时还能产出多个Awesome的项目.从你身上学习和受益了很多 !

关于开源贡献自己也是一个新手,这篇文章的目的一方面是对自己在这块的回顾与总结,另一个是希望能给想参与开源的伙伴一个参考.

生命不息,开源不止. 瑞思拜 !

f4ac8d75c0d21f40df767d4813076340.gif

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经写了7篇,点击查看年度总结。
同时,最近组织了源码共读活动,帮助3000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

ec4639f5dc1087cacb60ffbb9cc18c01.png

识别方二维码加我微信、拉你进源码共读

今日话题

略。分享、收藏、点赞、在看我的文章就是对我最大的支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java版电子商务spring cloud分布式微服务b2b2c社交电商(四)SpringBoot 整合JPA

b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六。JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA 的目标之一是制定一个可以由很多供应商实现的AP…

60款很酷的 jQuery 幻灯片演示和下载

jQuery 是一个非常优秀的 JavaScript 框架,使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果,其中之一就是幻灯片,一种在有限的网页空间内展示系列项目时非常好的方法。今天这篇文章要…

流体式布局与响应式布局_将固定像素设计转换为流体比例布局

流体式布局与响应式布局Responsive web design has been a prime necessity for every enterprise ever since Google announced that responsive, mobile-friendly websites will see a hike in their search engine rank in 2015.自Google宣布响应式,移动友好型网…

怎样开发一个 Node.js 命令行工具包

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。源码共读活动很多都是读…

redis完全攻略

安装篇 声明:以下环境均是在ubuntu下进行 wget http://redis.googlecode.com/files/redis-2.4.4.tar.gztar zxf redis-2.4.4.tar.gz 然后进入目录后直接make就可以了、如果迩的系统是32位的那么执行 make 32bit 安装完成后、执行一下make test看是否正常、如果出现“…

印刷报价系统源码_皇家印刷术-设计系统案例研究

印刷报价系统源码重点 (Top highlight)Typography. It’s complicated. With Product Design, it’s on every screen. Decisions for a type scale affect literally every aspect of a product. When you’re working with an existing product, defining typography can fee…

Python简单试题3

1,水仙花数 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身 (例如:1^3 5^3 3^3 153) 代码如下: 方法一: for i in range(100,1000): # 进行for循环num ia num % 10 # …

React Hooks 完全使用指南

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。React HooksHook 是什么…

重新设计Videoland的登录页面— UX案例研究

In late October of 2019 me and our CRO lead Lucas, set up a project at Videoland to redesign our main landing page for prospect customers (if they already have a subscription, they will go to the actual streaming product).在2019年10月下旬,我和我…

【常见Web应用安全问题】---5、File Inclusion

Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些。 常见Web应用安全问题安全性问题的列表:   1、跨站脚本攻击(CSS or XSS, Cross Site Scripting)   2、S…

全新的 Vue3 状态管理工具:Pinia

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。Vue3 发布已经有一段时间…

JS中变量和函数的使用

一、变量的介绍 1、啥是变量? 变量的本质是一块有名字的内存空间。变量由变量名和变量值构成。变量名指的是内存空间的别名,一般位于赋值运算符的左边;而变量值指的是内存空间中的数据,一般位于赋值运算符的右边。例如:var balanc…

Win32 API消息函数:GetMessagePos

Win32 API消息函数:GetMessagePos 函数功能:该函数返回表示屏幕坐标下光标位置的长整数值。此位置表示当上一消息由GetMessage取得时鼠标占用的点。 函数原型:DWORD GetMessagePos(VOID) 参数:无。 返回值&…

都快 2022 年了,这些 Github 使用技巧你都会了吗?

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。最近经常有小伙伴问我如…

单线程+异步协程

一 . 线程池和进程池 可以适当的使用,在大量的IO情况下有更好的方法 import time from multiprocessing.dummy import Pool def request(url):print(正在下载->,url)time.sleep(2)print(下载完毕->,url) start time.time() urls [www.baidu.com,www.taobao.com,www.sou…

Repeater\DataList\GridView实现分页,数据编辑与删除

一、实现效果 1、GridView 2、DataList 3、Repeater 二、代码 1、可以去Csdn资源下载,包含了Norwind中文示例数据库噢!(放心下,不要资源分) 下载地址:数据控件示例源码Norwind中文数据库 2、我的开发环境&a…

网站快速成型_我的老板对快速成型有什么期望?

网站快速成型Some of the top excuses I have gotten from clients when inviting them into a prototyping session are: “I am not a designer!” “I can’t draw!” “I have no creative background!”在邀请客户参加原型制作会议时,我从客户那里得到的一些主…

碎片化学前端,融入到积极上进的环境,我推荐~

众所周知,关注公众号可以了解学习掌握技术方向,学习优质好文,落实到自己项目中。还可以结交圈内好友,让自己融入到积极上进的技术氛围,促进自己的技术提升。话不多说,推荐这些优质前端公众号前端之神 80w阅…

重学JavaScript深入理解系列(六)

JavaScript深入理解—-闭包(Closures) 概要 本文将介绍一个在JavaScript经常会拿来讨论的话题 —— 闭包(closure)。闭包其实已经是个老生常谈的话题了; 有大量文章都介绍过闭包的内容,尽管如此,这里还是要试着从理论角…

EXT.NET复杂布局(四)——系统首页设计(上)

很久没有发帖了,很是惭愧,因此给各位使用EXT.NET的朋友献上一份礼物。 本篇主要讲述页面设计与效果,下篇将讲述编码并提供源码下载。 系统首页设计往往是个难点,因为往往要考虑以下因素: 重要通知系统功能菜单快捷操作…