专访|OpenTiny 开源社区 常浩:完成比完美更重要

前言

2023年已过大半,备受关注的 OpenTiny*开源之夏活动也顺利结项。开源之夏由中国科学院软件研究所发起的计划,目的在于鼓励在校学生积极参与开源软件的开发维护,推动优秀开源软件社区的繁荣发展。该活动联合各大开源社区,聚焦于关键开源软件的开发与维护,向全球高校学生开放报名。学生可自主选择感兴趣的项目进行申请,一旦中选,他们将在经验丰富的项目开发者(社区导师)的指导下进行开发。根据项目的难易程度和完成情况,表现出色的参与者将获得开源之夏活动奖金和结项证书。

回顾整个过程,OpenTiny 项目共建者和导师们共同经历了许多挑战和困难,但他们始终敢于突破,勇于实践,不断开拓新的思路和想法。最终,他们成功完成了“开发 OpenTiny 富文本编辑器组件”这一重要项目。

现在,让我们一起了解开源项目共建者——常浩同学是如何完成“OpenTiny 富文本组件的开发”这一任务的。他的经验和思路无疑也对咱们想要参与开源共建的朋友们提供了宝贵的启示和思路。

专访详情

OpenTiny: 欢迎你加入咱们 OpenTiny 开源社区,可以先简单介绍下你自己吗?

常浩: 大家好,我叫常浩,来自西安邮电大学,我是从大二开始接触前端的,2023年2月在网易有道有一段实习的经历。目前对于前端属于一个初步了解和学习的阶段。

OpenTiny: 你是从什么时候开始接触开源社区的,你眼中的开源是什么样的?

常浩: 我是2022年开始接触开源社区和开源项目的,主要是从同学那边了解到的。由于我去年接触的时间比较晚,所以当时没有选到自己比较感兴趣的前端项目,尝试了一个非前端领域相关的基于 python 的一个自动化构建的一个项目。今年由于有了经验,就提前做好准备,就希望在开源之夏找到一些和前端领域相关的项目。

我眼中的开源就前端领域而言,我觉得是一群技术非常到位的大佬们,从技术层面去构建一个项目并达到一些产出,去帮助到更多人去使用去提效。

OpenTiny: 最开始是如何了解到并决定参与 OpenTiny*开源之夏活动的?

常浩: 由于我是学的是前端,对前端领域的相关知识我是了解的,所以当有了开源之夏这个活动后,我就搜索了 Vue 框架、组件库相关的内容,然后我就看到 OpenTiny。之后我就去官网了解了 OpenTiny 具体是什么,大概结构是什么样的。除此之外,还有一个比较吸引我的点是在于“富文本”这三个字比较吸引我。因为我之前是在项目中是使用过富文本。因此这个富文本的构造及一整套流程还是非常吸引我。并且看到 OpenTiny 有富文本组件的项目,当时就决定要去深入学习和调研下。然后根据 OpenTiny 项目的要求做了基于两个代码库的 Demo,尝试去申请报名。

OpenTiny: 你觉得 OpenTiny 是什么?你为什么会选择参与 OpenTiny 项目呢?

常浩: 其实在我参与之前,我对于 OpenTiny 了解并不多,但我知道它是包含有组件库的。据我了解 OpenTiny 是一个新开源的组件库项目,因为在市场上已经有一些成熟的组件库了,我认为它能再站出来走组件库这条路,来源于它在技术层面及内容层面是很有特点的。比如说里面组件非常多,比我见过的所有的组件库的组件都多。除此之外,还包含 Vue2/Vue3 的兼容,还有跨 React 框架这些内容,并且还包括了低代码引擎等内容。我就感觉在技术层面是很有前瞻性的。这些点也激励我想来参与 OpenTiny 项目的共建。

对于 OpenTiny 的多个项目中我选择富文本组件,主要是因为我对于富文本组件还是比较感兴趣的。因为它虽然是嵌套在网页里的小功能,但我觉得它也是属于一个完整的独立的项目,能够从使用它到研发它,就觉得这个很吸引我。也希望通过参与项目 push 自己去学习探索或者说实现它,之前可能是停留在好奇的阶段。

OpenTiny: 你觉得在 OpenTiny 中写一个富文本组件和在 Vue 里面去封装一个富文本组件有什么不同?

常浩: 如果是我自己去封装一个富文本组件的话,可能在规范上就比较简单了。如果是 OpenTiny 开源项目的话,它会有一些固定的规范,这个对于我在后续实操写代码中,让我对代码规范有了更加清晰和明确的认知。比如说:整个 OpenTiny 是一个大工程,在这个大工程之下又有很多子包,每一个子包又是一个独立的工程,可以单独打包发布。所以在整个工程下就会有相应的规范,这个就让我了解了一些代码规范的原理和逻辑。

OpenTiny: 你可以介绍下你参与 OpenTiny 项目的开发的内容及过程吗?

常浩: 参与这个项目,我需要做的是基于 Tiptap 开源无头编辑器实现富文本组件的相应的一些功能。包含基本的加粗、斜体、颜色、标题、行高、列表、引用等格式;插入图片/视频及调整大小;插入/编辑超链接和链接卡片;插入行内代码、代码块;撤销重做、清除样式;插入/编辑表格等

因此,我首先通过调查 Tiptap 文档,掌握 Tiptap 的基本用法,自定义扩展用法,实现本地 Demo,掌握对齐增加行高功能,增加字号选择,增加代码块支持高亮,实现 table 交互效果等,完成组件设计结构,接着我又开始熟悉 TinyVue 组件库的项目规范,进行富文本组件开发,基本实现预期功能;再进一步进行结构的梳理,组件代码的完善,实现 Vue2/Vue3 版本兼容,主题一致,最终新增组件 rich-text-editor,达到了最终的实现效果:

OpenTiny: 在开发过程中有遇到什么困难或者挑战吗?你是如何克服的呢?导师和社区成员有为你提供帮助吗

常浩: 在开发过程中确实会遇到一些问题,但我们导师是非常热心帮我解答,并且一起参与讨论。

问题1:之前在对 tiptap/core 包的引入问题,基于 Vue 2还是 Vue 3版本需要引入不同的代码存在疑惑
结论:初期讨论,写一个 virtual-template,利用 vite 的 rollup 提供的 transfrom 在代码编译阶段,利用环境变量进行导入语句确定
最终采用别名映射也能达到同样效果,代码量小,且不会影响其他模块

问题2:样式冲突问题,已有的样式会对目标构建样式产生影响,例如无序列表没有符号,任务列表没有符号
结论:在控制台拿到样式表,在 style 文件进行逐一覆盖

问题3:通过 v-if 实现简单字符串匹配参数,来固定显示静态资源里的 icon,大量的v-if使得代码不优雅,然后要实现可以读取使用者传入的参数的 icon 静态资源,所以需要重构代码。


结论:将对应功能对应的事件和 icon 保存到 map 对象里,在模版处会用字符串参数去拿对应的 map 里存入的事件及 icon,使用者传入的 props 里是对象数组,则会使用对象里的 icon,没有对应 icon 则使用默认的 map 对象中保存的 icon

OpenTiny: 你认为在开发 OpenTiny 项目的过程中,最有意思的地方是什么?

常浩: 我认为比较有意思的地方在于在打包项目时需要完成 Vue2/Vue3的兼容,这个时候我是用到了一个基于 vite 的虚拟模板的插件,基于插件做判断引入哪个包,因此我又了解 vite 是基于 Rollup 的打包工具,从中又了解到 transform 的一个钩子函数,又了解钩子函数的用法,相当于是从编译之后的打包那一步起,在打包过程中去确定引入哪个包,我觉得这个机制是蛮有意思的。

当然除此之外,在我刚接触项目时,把项目克隆下来,发现项目很大并且很多文件都不认识,然后导师带着我去阅读每个工程项目是什么,讲的非常详细。这个也是我觉得比较有意思的地方,因此我也学到了很多。

OpenTiny: 你眼中的 OpenTiny 是个什么样的开源社区?

常浩: 首先我感觉社区成员和导师是非常有活力的,我能从导师身上感受到活力,以前我也没有想过自己能成为某个开源项目的共建者,因为自己也还是一个初出茅庐的学生,但现在在某个层面有感受到被重视的感觉。然后我觉得 OpenTiny 社区里面有很多技术比较厉害的人,我能加入进来,感觉很荣幸。总体而言,我感觉 OpenTiny 社区是非常有活力的并且有想法的。进到咱们的官网也能看到,里面组件非常多非常丰富,大家就是会想方设法去提供一个非常全面的功能,我感觉是很好的。

OpenTiny: 那你之后是否打算继续参与开源社区或者开源项目?

常浩: 嗯,这个会的,其实我对开源这个群体还是很敬佩的,他们属于技术的顶尖,也站在精神的顶尖。我希望之后还是能持续在前端组件库这个领域去做开源贡献。其实比如说市面上的组件库 elementUI 等,它们已经比较成熟了,但在使用过程中还是会出现二次封装的需求。然后我觉得 OpenTiny 的 TinyVue 组件库的话会想着无限接近于我想要的二次封装之后的要求。当我在需要用到某个组件时,我发现 OpenTiny 社区里有二次封装之后能达到我功能预期的一些组件,我觉得这个是很好的。

OpenTiny: 你参与了 OpenTiny 项目共建之后,你觉得你有什么收获呢?

常浩: 我觉得主要是有两个方面,第一个是从前端组件库整体结构的一个层面,让我了解了这些前端技术从如何构建、打包、发布等的一整套流程。也让我学到了 TinyVue 组件库的整体架构,比如某个文件夹内容放什么,顺序怎么样,怎么做调整都是很巧妙和精彩的。第二个在技术层面,也让我对于富文本更加了解了,包含代码库的整体的模式,以及怎样通过一些 render 函数、一些 options 等等方法设置快捷键的技术知识等等。

OpenTiny: 根据你的经验,你觉得怎样才能更好的融入开源社区呢?

常浩: 就我自己的经验而言,由于我之前对于这个项目是比较期待的,并且内心期望希望能把这个项目做好。所以我刚开始进度是比较缓慢的,因为我开始确实想了很多,并且我也是很费尽心思的去想,同时由于我也是学生,当前的能力也有限,所以我想的和实际能做好的可能并不能很一致。当时进度就比较慢,后面导师告诉我一句话——“完成比完美更重要”。这句话确实让我印象非常深刻,并且在当时的情况下,我自己的状态并不是太好,就是因为导师告诉我的这句话,对我有一个开导作用,调整了我的状态。所以很快,我也进入了开发状态,根据自己制定的项目规划时间表,一步一步去完成我的项目。

所以我觉得这句话也可以送给大家——“完成比完美更重要”,只要有想法了,就可以先行动,一步一步来总会达到你想要的效果。

关于 OpenTiny

图片

OpenTiny 是一套企业级 Web 前端开发解决方案,提供跨端、跨框架、跨版本的 TinyVue 组件库,包含基于 Angular+TypeScript 的 TinyNG 组件库,拥有灵活扩展的低代码引擎 TinyEngine,具备主题配置系统TinyTheme / 中后台模板 TinyPro/ TinyCLI 命令行等丰富的效率提升工具,可帮助开发者高效开发 Web 应用。


欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~更多视频内容也可关注B站、抖音、小红书、视频号

OpenTiny 也在持续招募贡献者,欢迎一起共建

OpenTiny 官网:https://opentiny.design/

OpenTiny 代码仓库:https://github.com/opentiny/

TinyVue 源码:https://github.com/opentiny/tiny-vue

TinyEngine 源码: https://github.com/opentiny/tiny-engine

欢迎进入代码仓库 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI~

如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逸学java【初级菜鸟篇】9.4 泛型

hi,我是逸尘,一起学java吧 泛型概述 泛型是我们在定义某一个类型规格的时候使用的泛指,我们预先定义一个大方向,防止路线错误。 实质上是程序员定义的安全类型,Object是顶级父类,在没有泛型很多程序员为了…

Android 10.0 mtp模式下连接PC后只显示指定文件夹功能实现

1. 前言 在android10.0的系统定制化开发中,对于usb作为otg连接电脑时,在mtp模式下会作为一个存储器在电脑端显示,作为电脑的 一个盘符,来显示设备的内部存储的文件,所以说如果要对设备内部的资料做保密处理的时候,需要在mtp模式下不显示某些 文件夹,接下来就分析下相关…

【C语言】qsort函数

目录 简介 头文件 ​编辑 函数原型: 参数函数如何写: 参数函数要求: qsort对整性数据的排序: qsort对字符型数据的排序: 对结构体类型的内部元素排序: 函数的底层是以快速排序实现的 但是本文不深入…

office word 使用笔记

office word 使用笔记 1. 功能1.1 格式快捷键1.2 复选框 2 遇到过的问题2.1 表格标题和表格距离过大 1. 功能 1.1 格式快捷键 复制格式:ctrl shift c 粘贴格式:ctrl shift v 1.2 复选框 方框位置和类型:“插入——高级符号——字体”选…

鸿蒙4.0开发笔记之ArkTs语言基础与基本组件结构(四)

文章声明&#xff1a;本文关于HarmonyOS系统的部分内容和描述借鉴于华为官网的“HarmonyOS开发者学堂”&#xff0c;有需要的也可以进入官网查看。<HarmonyOS第一课>ArkTS开发语言介绍 一、ArkTs语言介绍 ArkTS是鸿蒙系统&#xff08;HarmonyOS&#xff09;优选的主力应…

如何访问linux上的web服务

1.获取服务运行端口 例如8080 2.如果时vmware 需要先配置转发端口和主机ip 主机ip需要未使用的 例如&#xff1a; 3.查看虚拟机防火墙设置 centos8 为例 &#xff1a; firewall-cmd --zonepublic --list-ports 查看放通端口 如果没有放通 firewall-cmd --zonepublic --add-p…

0基础学习VR全景平台篇第122篇:VR视频剪辑和输出 - PR软件教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 开始之前如果没有接触过pr这款软件的话&#xff0c;建议先去看上一篇 认识视频剪辑软件Premiere 大致了解一下pr。 回到正题今天来教大家VR视频的剪辑和输出 我们先双击打开…

Mac自带的看图如何连续查看多张图片

一、问题 mac看访达里的图片时&#xff0c;双击打开一张图片&#xff0c;然后按上下左右键都没法切换到另外的图片。而且也没找到像window一样单击缩略图可以看到预览图。其实是自己不懂得怎么使用&#xff0c;哈哈哈&#x1f602; 二、方法 2.1、图标方式 可以看到缩略图&a…

老生常谈之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先来一个模棱两可的说法&#xff1a;因为精度丢失、存储溢出的问题 先复习一下二进制的转换方法&#xff1a; 整数&#xff1a;除以基数&#xff0c;取余&#xff0c;自底向上小数&#xff1a;乘以基数&#xff0c;取整&#xff0c;自顶向下 接着&#xff0c;复习一下双精度…

Linux进程通信——共享内存

概念 共享内存&#xff08;Shared Memory&#xff09;&#xff0c;指两个或多个进程共享一个给定的存储区。 特点 共享内存是最快的一种 IPC&#xff0c;因为进程是直接对内存进行存取。 因为多个进程可以同时操作&#xff0c;所以需要进行同步。 信号量共享内存通常结合在一…

排序算法--归并排序

实现逻辑 ① 将序列每相邻两个数字进行归并操作&#xff0c;形成floor(n/2)个序列&#xff0c;排序后每个序列包含两个元素 ② 将上述序列再次归并&#xff0c;形成floor(n/4)个序列&#xff0c;每个序列包含四个元素 ③ 重复步骤②&#xff0c;直到所有元素排序完毕 void pri…

透视未来:现代发电厂地区可视化与智慧能源的结合

随着全球能源消费的不断增长&#xff0c;电力需求也在不断上升。作为能源行业的重要组成部分&#xff0c;现代发电厂扮演着不可替代的角色。而现代发电厂的数据管理和监控系统&#xff0c;则是确保其安全、高效、稳定运行的重要手段。在这个背景下&#xff0c;现代发电厂地区可…

全局定制序列化

作用:将返回实体类中的属性如果为null 变成"" package com.example.micrweb.config;import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.f…

windows搭建gitlab教程

1.安装gitlab 说明&#xff1a;由于公司都是windows服务器&#xff0c;这里安装以windows为例&#xff0c;先安装一个虚拟机&#xff0c;然后安装一个docker&#xff08;前提条件&#xff09; 1.1搜索镜像 docker search gitlab #搜索所有的docker search gitlab-ce-zh #搜索…

LabVIEW中将SMU信号连接到PXI背板触发线

LabVIEW中将SMU信号连接到PXI背板触发线 本文介绍如何将信号从PXI&#xff08;e&#xff09;SMU卡路由到PXI&#xff08;e&#xff09;机箱上的背板触发线。该过程涉及使用NI-DCPowerVI将SMU信号导出到PXI_TRIG线上。 在继续操作之前&#xff0c;请确保在开发PC上安装了兼容版…

安防视频EasyCVR平台太阳能供电+4G摄像头视频监控方案的建设

在工地、光伏、风电站、水库河道等场景中&#xff0c;以及一些偏远地区的项目现场&#xff0c;会存在无网无电情况&#xff0c;大大制约了视频监控系统建设的效率及可行性。在这种场景中&#xff0c;我们也可以通过太阳能供电4G监控摄像机的方案&#xff0c;满足偏远地区无网无…

VUE语法-$refs和ref属性的使用

1、$refs和ref属性的使用 1、$refs:一个包含 DOM 元素和组件实例的对象&#xff0c;通过模板引用注册。 2、ref实际上获取元素的DOM节点 3、如果需要在Vue中操作DOM我们可以通过ref和$refs这两个来实现 总结:$refs可以获取被ref属性修饰的元素的相关信息。 1.1、$refs和re…

IT 领域中的主要自动化趋势

48%的IT自动化流程属于IT服务管理&#xff0c;过去一年中&#xff0c;IT运维自动化增长了272%。 IT部门从交付者转变为战略伙伴 今年的《工作自动化指数》数据显示&#xff0c;自动化正在蔓延到组织的各个部门&#xff0c;越来越多的部门采用自动化&#xff0c;并且IT以外的员工…

oracle “ORA-25153:临时表空间为空”

从生产上面备份出来了一个数据库&#xff0c;应用在使用时显示ORA-25153临时表空间为空的报错&#xff0c;原因一般是数据库迁移时&#xff0c;没有迁移完整造成的 解决方法 1.创建新的临时表空间temp2 create temporary tablespace temp2 tempfile DATA size 100M autoexten…

【C语言】深入理解指针(四)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…