專訪|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.pswp.cn/news/162435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162435.shtml
英文地址,請注明出處:http://en.pswp.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;保留透明區域…