专访|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标签,一起参与开源贡献~

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

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

相关文章

令人赞叹的花里胡哨的代码雨动画效果

【点我-这里送书】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(…

element emitter broadcast向下广播 dispatch向上分派

emitter 项目使用element的emitter.js,做个使用记录 function broadcast(componentName, eventName, params) {this.$children.forEach(child > {const name child.$options.name;if (name componentName) {child.$emit.apply(child, [eventName].concat(para…

pytorch训练出现的bug

训练过后发现.csv文件左侧出现了几列unname和一列0,1,2。这个时候在训练就会从unname那一列开始训练。我们需要把这几列删除,之后再重新训练

华清远见嵌入式学习——网络编程——作业3

目录 作业要求&#xff1a;基于UDP的TFTP文件传输 代码 下载功能效果图​编辑 上传功能效果图 思维导图 模拟面试题和答案&#xff08;定期更新&#xff09; 作业要求&#xff1a;基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…

前端Math属性方法汇总集锦

Description of Math Math 是一个内置对象&#xff0c;它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 与其他全局对象不同的是&#xff0c;Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写…

『heqingchun-Ubuntu系统+x86架构+编译安装ffmpeg+带有nvidia硬件加速』

Ubuntu系统x86架构编译安装ffmpeg带有nvidia硬件加速 一、准备文件 注&#xff1a;可直接下载我上传的CSDN资源&#xff0c;然后直接跳到"一"中的第"3"项"将文件按以下顺序存放"。 ffmpeg源码&#xff1a;音视频开发ffmpeg编译所需资源文件 其…

Pgsql常用命令

Postgresql数据库常用命令 1、连接数据库, 默认的用户和数据库是postgres psql -h host -p port -U user -d dbname 2、执行sql文件 psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d safe_browser -f xxxx.sql \i /xxxxx/xxx/xxxxxx.sql 3、切换数据库,相当于mysql的use d…

Ajax技

Ajax的特点 异步提交&#xff1a;Ajax采用异步通信方式&#xff0c;能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据&#xff0c;提升了用户体验。无需插件&#xff1a;Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的&#xff0c;无需安装插件或…

打开和关闭conda,激活和关闭conda,详解退出conda环境

Python编程技巧&#xff1a;详解退出conda环境 https://www.python100.com/html/110499.html # 创建虚拟环境~/anaconda3/bin/conda create -n name python3.6 # 激活虚拟环境 source ~/anaconda3/bin/activate name # 查看所有环境 conda env list # 激活虚拟环境 conda activ…

使用JVS低代码表单引擎高效管理文件,实现个性化需求

在数字化、信息化的时代&#xff0c;文件上传与管理功能已经成为了各类应用系统的标配。无论是在办公自动化、项目管理还是内容管理系统中&#xff0c;我们都希望能轻松、高效地完成文件的上传、查看和管理。JVS低代码表单引擎提供了文件类组件。无论是文件类型、大小的限制&am…

ubuntu Setforeground 前台应用切换

场景分析 有这样一个系统&#xff0c;一个服务主进程用于接收指令&#xff0c;其它服务是独立的gui 程序&#xff0c;服务进程根据命令将对应的gui 程序切换到前台。 windows 平台有Setforeground 这个api&#xff0c;可以根据进程ID&#xff0c;将某个应用的窗口切换到前台。…

SpringBoot整合Redis,redis连接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置类RedisConfig&#xff0c;实现RedisTemplate序列化1.4 代码测试 2、SpringBoot整合redis几个疑问&#xff1f;2.1、Redis 连接池讲解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…

UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“

​ 目录 uniapp进行打包 使用上架工具appuplode进行发包 1.登录appuploder软件 2.登陆开发者App Store后台 uniapp进行打包 在HBuilder X编辑器中打开需要打包的项目&#xff0c;然后点击上面菜单栏中 发行 > 原生App-云打包&#xff0c;对以下弹出的弹窗进行内容填写 ​…

竞赛python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

Java计算时间差,距结束还有几天几小时几分钟

文章目录 1、写法2、备份3、LocalDate、LocalDateTime、Date、String互转 1、写法 //静态方法&#xff0c;传入年月日时分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //计算…

Java基层卫生健康云综合管理(云his)系统源码

云HIS&#xff08;Cloud-Based Healthcare Information System&#xff09;是基于云计算的医院健康卫生信息系统。它运用云计算、大数据、物联网等新兴信息技术&#xff0c;按照现代医疗卫生管理要求&#xff0c;在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、…

indexedDB存储

使用 setDBData({ id: name, value: 张三, expire: new Date().getTime() 10000 }, info, infoDB) console.log(getDBData(name, info, infoDB)); 添加或更新数据 async function setDBData(data,storeName "storeName",dbName "dbName",version ) {c…

educoder中Hive综合应用案例 — 用户搜索日志分析

第1关:2018年点击量最高的10个网站域名 ---------- 禁止修改 ----------drop database if exists mydb cascade; ---------- 禁止修改 -------------------- begin ---------- ---创建mydb数据库 create database mydb;---使用mydb数据库 use mydb;---创建表db_search create…

CVE-2023-27524:Apache Superset未授权访问漏洞复现

文章目录 ​Apache Superset 未授权访问漏洞(CVE-2023-27524)复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.漏洞复现 0x06 修复建议 ​Apache Superset 未授权访问漏洞(CVE-2023-27524)复现 0x01 前言 免责声明&#xff1a;请勿利用文…

在线工具收集

在线工具收集 1、在线P图 https://www.photopea.com/ 一款类似于PS的在线抠图软件 ①去除图片中的文字&#xff0c;并填充背景色 第一步&#xff1a;使用矩形选中要清除的文字 第二步&#xff1a;点击编辑选择填充 第三步&#xff1a;选择内容识别&#xff0c;保留透明区域…